复制线程
复制线程主要包括三个线程:
master转储线程:在master出现数据更新时,会生成一个转储线程将二进制日志中的语句发送到slave
slaveI/O线程:在master生成转储线程的同时,slave同时会生成一个I/O线程将从master读取的语句,写入中继日志。
slave的SQL线程:slave的I/O线程在写入中继日志后,SQL线程会串行读取中继日志中的事件进行数据更新。
Slave线程的启动和停止
通过START SLAVE指令可以开启I/O和SQL线程,如果在启动服务器时存在master.info文件,I/O线程可以从该文件中获取同步master的位置,从master中继续获取数据更新操作到中继日志。SQL线程用来获取replay-log.info文件中获取需要从中继日志恢复数据。
slave的线程启动指令:
START SLAVE IO_THREAD和STOP SLAVE IO_THREAD //启动和停止IO线程
START SLAVE SQL_THREAD 和 STOP SLAVE SQL_THREAD //启动和停止SQL线程
通过Internet运行复制
SSL建立主从安全连接
在使用SSL进行安全连接时,需要在主从服务器上配置CA证书,使master的加密可用,slave进行加密复制。
master的my.conf配置
ssl-capath=/etc/ssl/certs
ssl-cert=/etc/ssl/certs/master.pem
ssl-key=/etc/ssl/private/master.key
slave同步master
SLAVE > CHANGE MASTER TO
MASTER_HOST="hostname",
MASTER_PORT="port",
MASTER_USER="username",
MASTER_PASSWORD="password",
MASTER_LOG_FILE="binglogname",
MASTER_LOG_POS="postion",
MASTER_SSL_CAPATH="/etc/ssl/certs",
MASTER_SSL_CERT="/etc/ssl/certs/slave.pem",
MASTER_SSL_KEY="/etc/ssl/private/slave.key"
stunnel安全复制
stunnel的安全连接是在SSL服务器的基础上实现的,需要CA证书,同时服务器需要公有证书和私有密钥。stunnel的安全连接如下图:
master服务器监听的ssl套接字为3508,slave服务器监听的ssl套接字为3408。
master的my.conf配置
CApath=/etc/ssl/certs
cert=/etc/ssl/certs/master.pem
key=/etc/ssl/private/master.key
[mysqlrepl]
accept=3508
connect=3306
slave的my.conf配置
CApath=/etc/ssl/certs
cert=/etc/ssl/certs/slave.pem
key=/etc/ssl/private/slave.key
[mysqlrepl]
accept=3408
connect=masterip:3508
slave同步master
slave > change master to master_host="hostname",master_port="port",master_user="username",master_password="password",master_log_file="binglogname",master_log_pos="postion"
处理断开连接的参数
slave-net-timeout #slave连接master时,如果在该时间段内无法连接,slave认为已经断开,需要尝试连接。默认值为3600秒
master-connect-retry #两次连接之间间隔的时间段,默认60秒
master-retry-count #最大尝试连接次数,默认值为86400