MySQL 5.5 到MySQL 5.6半同步复制(SSL)

数据放在一个raid 1上:

[root@slave1 ~]# yum -y install mdadm
[root@slave1 ~]# mdadm -C /dev/md0 -l1 -n2 /dev/sd{b,c}
[root@slave1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc[1] sdb[0]
      5241844 blocks super 1.2 [2/2] [UU]
      [====>................]  resync = 23.0% (1207808/5241844) finish=3.6min speed=18452K/sec
                                                                                                                                                                                                                                                                            
unused devices: <none>
[root@slave1 ~]# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Mon Aug 19 18:51:05 2013
     Raid Level : raid1
     Array Size : 5241844 (5.00 GiB 5.37 GB)
  Used Dev Size : 5241844 (5.00 GiB 5.37 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Mon Aug 19 18:56:02 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
           Name : slave1:0  (local to host slave1)
           UUID : 88d2d04d:a886df3f:2c2a8a10:247becc5
         Events : 17
    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
[root@slave1 ~]# mdadm -Ds >> /etc/mdadm.conf
[root@slave1 ~]# cat /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=slave1:0 UUID=88d2d04d:a886df3f:2c2a8a10:247becc5
[root@slave1 ~]# mkdir /mydata
[root@slave1 ~]# echo "` blkid /dev/md0 | awk '{print $2}'`   /mydata/ ext4    defaults        0 0 " >>/etc/fstab
[root@slave1 ~]# mount -a
[root@slave1 ~]# df -PTh | grep md0
/dev/md0      ext4    5.0G  138M  4.6G   3% /mydata
[root@slave1 ~]#  yum -y install libaio-devel
[root@slave1 ~]# tar xvf mysql-5.6.10-linux-glibc2.5-i686.tar.gz -C /usr/local/
[root@slave1 ~]# mkdir  /mydata/data
[root@slave1 ~]# groupadd -r mysql
[root@slave1 ~]# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
[root@slave1 ~]# chown -R mysql:mysql /mydata/data
[root@slave1 ~]# cd /usr/local/
[root@slave1 local]# ln -sv mysql-5.6.10-linux-glibc2.5-i686/ mysql
`mysql' -> `mysql-5.6.10-linux-glibc2.5-i686/'
[root@slave1 local]# chown -R mysql:mysql  mysql/*
root@slave1 local]# cd mysql
[root@slave1 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
[root@slave1 mysql]# chown -R root  .
[root@slave1 mysql]# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
[root@slave1 mysql]# chmod +x /etc/rc.d/init.d/mysqld
[root@slave1 mysql]# chkconfig --add mysqld
[root@slave1 mysql]# ln -sv /usr/local/mysql/bin/mysql /bin/
`/bin/mysql' -> `/usr/local/mysql/bin/mysql'
[root@slave1 mysql]#  ln -sv /usr/local/mysql/include  /usr/include/mysql
`/usr/include/mysql' -> `/usr/local/mysql/include'
[root@slave1 mysql]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf && ldconfig
[root@master ~]# cp /etc/my.cnf master.cnf
[root@master ~]# cp master.cnf slave.conf
[root@master ~]# vim slave.conf
[root@master ~]# !diff
diff master.cnf slave.conf
54c54
< log-bin=mysql-bin
---
> #log-bin=mysql-bin
57c57
< binlog_format=mixed
---
> #binlog_format=mixed
62c62,63
< server-id  = 1
---
> server-id  = 11
> replicate_do_db = shop
[root@master ~]# scp slave.conf 10.10.10.62:/etc/my.cnf
[root@slave1 mysql]# service mysqld start
Starting MySQL.... SUCCESS!
[root@slave1 ~]# mysql -e "select version();show databases;"
+------------+
| version()  |
+------------+
| 5.6.10-log |
+------------+
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

master上授权复制用户

mysql> GRANT REPLICATION SLAVE ON *.* TO repluser@'10.10.10.%' IDENTIFIED BY 'redhat';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.07 sec)

准备数据:

[root@master ~]# mysqldump -p`cat abc` --master-data=2  shop >shop.sql
[root@master ~]# scp shop.sql 10.10.10.62:/root/

这里以注释的方式记下了二进制日志位置,作为后面参考

[root@slave1 ~]# grep -i master shop.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=490;
[root@slave1 ~]# mysql  -e "create database shop;"
[root@slave1 ~]# mysql shop<shop.sql
mysql> CHANGE MASTER TO
    -> MASTER_HOST='10.10.10.61',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='redhat',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='mysql-bin.000006',
    -> MASTER_LOG_POS=490,
    -> MASTER_CONNECT_RETRY=10;
Query OK, 0 rows affected, 2 warnings (0.30 sec)
mysql> show warnings\G
*************************** 1. row ***************************
  Level: Note
   Code: 1759
Message: Sending passwords in plain text without SSL/TLS is extremely insecure.
*************************** 2. row ***************************
  Level: Note
   Code: 1760
Message: Storing MySQL user name or password information in the master.info repository is not secure and is therefore not recommended. Please see the MySQL Manual for more about this issue and possible alternatives.
2 rows in set (0.03 sec)
mysql> start slave;
Query OK, 0 rows affected (0.06 sec)
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.10.10.61
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos: 490
               Relay_Log_File: slave1-relay-bin.000002
                Relay_Log_Pos: 270
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: shop
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 490
              Relay_Log_Space: 444
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID:
             Master_Info_File: /mydata/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
1 row in set (0.00 sec)
[root@slave1 ~]# mysql -e 'show databases;select user_id,user_name,last_time from shop.ecs_users;'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| shop               |
| test               |
+--------------------+
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       8 | week1     | 2013-08-19 00:00:14 |
|       9 | week2     | 2013-08-20 00:00:06 |
|      10 | week3     | 2013-08-21 00:00:08 |
|      11 | week4     | 2013-08-22 00:00:06 |
|      12 | week5     | 2013-08-23 00:00:03 |
|      13 | week6     | 2013-08-24 00:00:03 |
+---------+-----------+---------------------+

master上插入一条记录:

Master> insert into shop.ecs_users(user_name,last_time) values('week0',now());
Master> select user_id,user_name,last_time from shop.ecs_users;
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       8 | week1     | 2013-08-19 00:00:14 |
|       9 | week2     | 2013-08-20 00:00:06 |
|      10 | week3     | 2013-08-21 00:00:08 |
|      11 | week4     | 2013-08-22 00:00:06 |
|      12 | week5     | 2013-08-23 00:00:03 |
|      13 | week6     | 2013-08-24 00:00:03 |
|      16 | week0     | 2013-08-25 15:33:53 |
+---------+-----------+---------------------+
11 rows in set (0.00 sec)

从库上查询

[root@slave1 ~]# mysql -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       8 | week1     | 2013-08-19 00:00:14 |
|       9 | week2     | 2013-08-20 00:00:06 |
|      10 | week3     | 2013-08-21 00:00:08 |
|      11 | week4     | 2013-08-22 00:00:06 |
|      12 | week5     | 2013-08-23 00:00:03 |
|      13 | week6     | 2013-08-24 00:00:03 |
|      16 | week0     | 2013-08-25 15:33:53 |
+---------+-----------+---------------------+
Slave1> use test
Database changed
Slave1> show tables;
Empty set (0.00 sec)

可见从库并没有复制Replicate_Do_DB之外的库

binlog_format=mixd不能正确复制的问题;

[root@master ~]# mysql -predhat -e "insert into shop.ecs_users(user_name,last_time) values('week`date +%w`',now());"
[root@master ~]# mysql -predhat -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       8 | week1     | 2013-08-19 00:00:14 |
|       9 | week2     | 2013-08-20 00:00:06 |
|      10 | week3     | 2013-08-21 00:00:08 |
|      11 | week4     | 2013-08-22 00:00:06 |
|      12 | week5     | 2013-08-23 00:00:03 |
|      13 | week6     | 2013-08-24 00:00:03 |
|      19 | week0     | 2013-08-25 16:01:21 |
+---------+-----------+---------------------+
[root@master ~]# mysql -predhat -e 'show master status;'
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 |      370 |              |                  |
+------------------+----------+--------------+------------------+
[root@slave1 ~]# mysql -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       8 | week1     | 2013-08-19 00:00:14 |
|       9 | week2     | 2013-08-20 00:00:06 |
|      10 | week3     | 2013-08-21 00:00:08 |
|      11 | week4     | 2013-08-22 00:00:06 |
|      12 | week5     | 2013-08-23 00:00:03 |
|      13 | week6     | 2013-08-24 00:00:03 |
+---------+-----------+---------------------+
[root@slave1 ~]# mysql -e 'show slave status\G'
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.10.10.61
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin.000007
          Read_Master_Log_Pos: 370
               Relay_Log_File: slave1-relay-bin.000004
                Relay_Log_Pos: 529
        Relay_Master_Log_File: mysql-bin.000007
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: shop
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 370
              Relay_Log_Space: 742
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID:
             Master_Info_File: /mydata/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0

解决办法:

[root@master ~]# vim /etc/my.cnf
binlog_format=row
[root@master ~]# service mysqld restart
Shutting down MySQL.... SUCCESS!
Starting MySQL.... SUCCESS!
[root@master ~]# mysql -predhat -e "insert into shop.ecs_users(user_name,last_time) values('week10',now());"
[root@master ~]# mysql -predhat -e 'select user_id,user_name,last_time from shop.ecs_users;'
+---------+-----------+---------------------+
| user_id | user_name | last_time           |
+---------+-----------+---------------------+
|       1 | ecshop    | 0000-00-00 00:00:00 |
|       2 | vip       | 0000-00-00 00:00:00 |
|       3 | text      | 0000-00-00 00:00:00 |
|       5 | zuanshi   | 0000-00-00 00:00:00 |
|       8 | week1     | 2013-08-19 00:00:14 |
|       9 | week2     | 2013-08-20 00:00:06 |
|      10 | week3     | 2013-08-21 00:00:08 |
|      11 | week4     | 2013-08-22 00:00:06 |
|      12 | week5     | 2013-08-23 00:00:03 |
|      13 | week6     | 2013-08-24 00:00:03 |
|      19 | week0     | 2013-08-25 16:01:21 |
|      20 | week10    | 2013-08-25 16:06:59 |
+---------+-----------+---------------------+




MySQL 5.5 -> MySQL 5.6半同步复制:

安装插件

Master> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Slave1> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

修改配置文件:

master上
[root@master ~]# vim /etc/my.cnf
rpl_semi_sync_master_enabled=ON
slave 上
[root@slave1 ~]# vim /etc/my.cnf
rpl_semi_sync_slave_enabled=ON

重新读取配置文件

[root@master ~]# service mysqld reload
[root@slave1 ~]# service mysqld reload
[root@master ~]# mysql -p`cat abc` -e "show global variables like 'rpl_%';"
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_recovery_rank                  | 0     |
| rpl_semi_sync_master_enabled       | ON    |
| rpl_semi_sync_master_timeout       | 10000 |
| rpl_semi_sync_master_trace_level   | 32    |
| rpl_semi_sync_master_wait_no_slave | ON    |
+------------------------------------+-------+
[root@master ~]# mysql -p`cat abc` -e "show global status like 'rpl_%status';"
+-----------------------------+-------------+
| Variable_name               | Value       |
+-----------------------------+-------------+
| Rpl_semi_sync_master_status | ON          |
| Rpl_status                  | AUTH_MASTER |
+-----------------------------+-------------+
[root@slave1 ~]# mysql -e "show global variables like '%rpl%';"
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
[root@slave1 ~]# mysql -e "show global status like 'rpl%';"
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+

基于ssl的复制
主服务器上配置CA
修改openssl.cnf配置文件

[root@master ~]# cp /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf.bak
[root@master ~]# sed -i "s/countryName_default.*XX/countryName_default\t\t= CN/g" /etc/pki/tls/openssl.cnf
[root@master ~]# sed -i "s/#stateOrProvinceName_default.*Province/stateOrProvinceName_default\t= shanghai/g" /etc/pki/tls/openssl.cnf
[root@master ~]# sed -i "s/localityName_default.*City/localityName_default\t= shanghai/g" /etc/pki/tls/openssl.cnf
[root@master ~]# sed -i "s/0.organizationName_default.*/0.organizationName_default\t= SanYu/g" /etc/pki/tls/openssl.cnf
[root@master ~]# sed -i "s/#organizationalUnitName_default.*=/organizationalUnitName_default\t= Tech/g" /etc/pki/tls/openssl.cnf
[root@master ~]# (umask 077 ;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
......................................................................................................................+++
........+++
e is 65537 (0x10001)
[root@master ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [shanghai]:
Locality Name (eg, city) [shanghai]:
Organization Name (eg, company) [SanYu]:
Organizational Unit Name (eg, section) [Tech]:
Common Name (eg, your name or your server's hostname) []:master.sanyu.com
Email Address []:[email protected]
[root@master ~]# touch /etc/pki/CA/index.txt
[root@master ~]# touch /etc/pki/CA/serial
[root@master ~]# echo 01 >> /etc/pki/CA/serial
[root@master ~]# mkdir /usr/local/mysql/ssl
[root@master ~]# cd /usr/local/mysql/ssl/
[root@master ssl]# openssl req -new -key mysql.key -out mysql.csr
[root@master ~]# (umask 077;openssl genrsa -out /usr/local/mysql/ssl/mysql.key 1024)
[root@master ssl]# openssl ca -in mysql.csr -out mysql.crt -days 365
[root@master ssl]# chown -R mysql.mysql ../ssl/
[root@master ssl]# ll
total 16
-rw-r--r-- 1 mysql mysql 1424 Aug 25 18:24 cacert.pem
-rw-r--r-- 1 mysql mysql 3853 Aug 25 18:24 mysql.crt
-rw-r--r-- 1 mysql mysql  700 Aug 25 18:23 mysql.csr
-rw------- 1 mysql mysql  887 Aug 25 18:19 mysql.key

从服务器上:

[root@slave1 ~]# mkdir /usr/local/mysql/ssl
[root@slave1 ~]# cd !$
cd /usr/local/mysql/ssl
[root@slave1 ssl]# (umask 077;openssl genrsa -out mysql.key 1024)
[root@slave1 ssl]# openssl req -new -key mysql.key -out mysql.csr
[root@slave1 ssl]# scp mysql.csr 10.10.10.61:/root/

主服务器上CA为从服务器颁发证书

[root@master ~]# openssl ca -in mysql.csr -out mysql.crt
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 2 (0x2)
        Validity
            Not Before: Aug 25 10:31:59 2013 GMT
            Not After : Aug 25 10:31:59 2014 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = shanghai
            organizationName          = SanYu
            organizationalUnitName    = Tech
            commonName                = slave1.sanyu.com
            emailAddress              = [email protected]
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                06:E8:D4:87:31:21:DF:38:CE:01:42:D7:7E:16:D3:2A:4D:94:0C:1C
            X509v3 Authority Key Identifier:
                keyid:41:8B:3D:9A:D6:7E:63:A3:10:53:64:B4:B2:D9:E1:ED:3C:5E:5B:96
Certificate is to be certified until Aug 25 10:31:59 2014 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@master ~]# scp mysql.crt /etc/pki/CA/cacert.pem 10.10.10.62:/usr/local/mysql/ssl/
[root@slave1 ssl]# chown -R mysql.mysql ../ssl/

修改my.conf启用ssl

[root@master ~]# grep ssl /etc/my.cnf
ssl-ca=/usr/local/mysql/ssl/cacert.pem
ssl-key=/usr/local/mysql/ssl/mysql.key
ssl-cert=/usr/local/mysql/ssl/mysql.crt
[root@slave1 ssl]# grep ssl /etc/my.cnf
ssl-ca=/usr/local/mysql/ssl/cacert.pem
ssl-key=/usr/local/mysql/ssl/mysql.key
ssl-cert=/usr/local/mysql/ssl/mysql.crt
[root@master ssl]# service mysqld restart
[root@slave1 ssl]# service mysqld restart
mysql>  show variables like '%ssl%';
+---------------+---------------------------------+
| Variable_name | Value                           |
+---------------+---------------------------------+
| have_openssl  | YES                             |
| have_ssl      | YES                             |
| ssl_ca        | /usr/local/mysql/ssl/cacert.pem |
| ssl_capath    |                                 |
| ssl_cert      | /usr/local/mysql/ssl/mysql.crt  |
| ssl_cipher    |                                 |
| ssl_key       | /usr/local/mysql/ssl/mysql.key  |
+---------------+---------------------------------+

重新授权复制用户

Master>revoke REPLICATION SLAVE ON *.* from 'repluser'@'10.10.10.%';
Master> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'10.10.10.%' IDENTIFIED BY 'redhat' require ssl;
Master> flush privileges;
Slave1> CHANGE MASTER TO
    -> MASTER_HOST='10.10.10.61',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='redhat',
    -> MASTER_LOG_FILE='mysql-bin.000017',
    -> MASTER_LOG_POS=484,
    -> MASTER_SSL=1,
    -> MASTER_SSL_CA='/usr/local/mysql/ssl/cacert.pem',
    -> MASTER_SSL_CAPATH='/usr/local/mysql/ssl',
    -> MASTER_SSL_CERT='/usr/local/mysql/ssl/mysql.crt',
    -> MASTER_SSL_KEY='/usr/local/mysql/ssl/mysql.key';
Query OK, 0 rows affected, 2 warnings (0.34 sec)
Slave1> start slave;
Query OK, 0 rows affected (0.07 sec)
Slave1> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.10.10.61
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin.000017
          Read_Master_Log_Pos: 484
               Relay_Log_File: slave1-relay-bin.000002
                Relay_Log_Pos: 266
        Relay_Master_Log_File: mysql-bin.000017
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: shop
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 484
              Relay_Log_Space: 436
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: Yes
           Master_SSL_CA_File: /usr/local/mysql/ssl/cacert.pem
           Master_SSL_CA_Path: /usr/local/mysql/ssl
              Master_SSL_Cert: /usr/local/mysql/ssl/mysql.crt
            Master_SSL_Cipher:
               Master_SSL_Key: /usr/local/mysql/ssl/mysql.key
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID:
             Master_Info_File: /mydata/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl: /usr/local/mysql/ssl/cacert.pem
           Master_SSL_Crlpath: /usr/local/mysql/ssl
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
1 row in set (0.01 sec)

主从数据不一致导致复制中止如何跳过错误
由于某些原因主库上某些记录从服务器上没有,主库上对这些数据做操作时从库不能正确执行,如果影响不大可以直接跳过错误继续执行

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.10.10.61
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin.000015
          Read_Master_Log_Pos: 1485
               Relay_Log_File: slave1-relay-bin.000025
                Relay_Log_Pos: 270
        Relay_Master_Log_File: mysql-bin.000015
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB: shop
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 1032
                   Last_Error: Could not execute Delete_rows_v1 event on table shop.ecs_users; Can't find record in 'ecs_users', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000015, end_log_pos 1255
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 107
              Relay_Log_Space: 1822
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 1032
               Last_SQL_Error: Could not execute Delete_rows_v1 event on table shop.ecs_users; Can't find record in 'ecs_users', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000015, end_log_pos 1255
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID:
             Master_Info_File: /mydata/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State:
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp: 130826 09:58:50
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
1 row in set (0.01 sec)

先暂停复制

mysql>  STOP SLAVE;
Query OK, 0 rows affected (0.08 sec)


跳过发生错误的event

mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
Query OK, 0 rows affected (0.00 sec)


再次开始复制

mysql>  START SLAVE;
Query OK, 0 rows affected (0.04 sec)
mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Connecting to master
                  Master_Host: 10.10.10.61
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin.000015
          Read_Master_Log_Pos: 1485
               Relay_Log_File: slave1-relay-bin.000025
                Relay_Log_Pos: 1648
        Relay_Master_Log_File: mysql-bin.000015
             Slave_IO_Running: Connecting
            Slave_SQL_Running: Yes
              Replicate_Do_DB: shop
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1485
              Relay_Log_Space: 1822
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID:
             Master_Info_File: /mydata/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
1 row in set (0.01 sec)



你可能感兴趣的:(mysql,ssl,5.6,5.5,半同步复制)