复制线程

  复制线程主要包括三个线程:

  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