Mysql复制node
Mysql内建的复制功能是构建大型、高性能应用程序的基础。Mysql支持单向、异步复制,复制过程当中一台服务器充当主服务器,而另一个或多个服务器充当从服务器。这不只仅对高性能的程序有益,对其余任务也方便,好比远程共享数据、保持“热备”等等。mysql
复制解决的基本问题是让一台服务器的数据和另外的服务器保持同步。主服务器和从服务器能够位于不一样的网络拓扑中,还能对整台服务器、特定的数据库、甚至特定的表进行复制。linux
在进入详细设置复制以前,先看看它实际是如何复制数据的。整体来讲,复制有3个步骤:sql
一、主服务器把数据更改记录到二进制日志中。(这叫作二进制日志事件)数据库
二、从服务器把主服务器的二进制日志拷贝到本身的中继日志中。vim
三、从服务器重放中继日志中的事件,把更改应用到本身的数据上。缓存
这只是概述,每个步骤都很复杂。下图更清晰描述了复制的过程。bash
第一步是在主服务器上记录二进制日志。在每一个更新数据的事务完成以前,主服务器都会将数据更改记录到二进制日志中。即便事务在执行期间是交错的,mysql也会串行地将事务写入到二进制日志中。在把事件写入二进制日志以后,主服务器告诉存储引擎提交事务。服务器
第二步是从服务器把主服务器的二进制日志拷贝到本身的硬盘上,进入所谓的“中继日志”中。首先,它启动一个工做线程,叫I/O线程,这个I/O线程开启一个普通的客户端链接,而后启动一个特殊的二进制日志转储进程(它没有相应的SQL命令)。这个转储进程从主服务器的二进制日志中读取数据。它不会对事件进行轮询。若是3跟上了主服务器,就会进入休眠状态并等待有新的事件发生时主服务器发出的信号。I/O线程把数据写入从服务器的中继日志中。网络
第三步SQL线程读取中继日志,而且重放其中的事件,而后更新从服务器的数据。因为这个线程能跟上I/O线程,中继日志一般在操做系统的缓存中,因此中继日志的开销很低。SQL线程执行事件也能够被写入从服务器本身的二进制日志中,它对于有些场景很实用。
本篇博文主要讲解Mysql的主从复制、半同步复制、基于SSL复制。
环境介绍:
系统:CentoS6.4-x86_64
主服务器:node1:172.16.18.7
从服务器:node2:172.16.18.9
Mysql版本:mysql-5.5.33
主从复制:
思路解析:
主服务器:建立具备复制权限的用户帐号;设置server-id;启动二进制日志。
从服务器:启动中继日志;设置server-id;启动复制线程。
过程解析:
一、建立主从服务器并实现双机互信:
主服务器:
[root@node1~]# ssh-keygen -t rsa -P '' [root@node1~]##ssh-copy-id -i .ssh/id_rsa.pub root@172.16.18.9
从服务器:
[root@node2~]# ssh-keygen -t rsa -P '' [root@node2~]##ssh-copy-id -i .ssh/id_rsa.pub root@172.16.18.7
二、编辑主从服务器的hosts文件:
[root@node1~]# vim /etc/hosts #####添加以下两项:############### 172.16.18.7node1.magedu.com node1 172.16.18.9node2.magedu.com node2 #####保存并复制至node2上:######## [root@node1~]# scp /etc/hosts 172.16.18.9:/etc
三、查看时间并同步时间:
[root@node1 ~]#date;ssh node2 'date'
注意:必须保证时间一致,这样主从复制才不会实现时间间隔。
四、安装Mysql:(主从服务器)
这里不在详细介绍了,请参考http://pangge.blog.51cto.com/6013757/1059896
(1)、建立用户 #groupadd -g 306 mysql #useradd -g mysql -u 306 -r mysql (2)、建立数据目录: #mkdir/mydata/data –pv (3)、更改数据目录权限: #chown -R mysql.mysql /mydata/data (4)、解压Mysql建立连接 #tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local #ln -sv mysql-5.5.33-linux2.6-x86_64 mysql (5)、更改属主属组 #cd mysql #chown -R root:mysql./* (6)、初始化mysql #scripts/mysql_install_db --user=mysql --datadir=/mydata/data (7)、建立启动脚本并赋予权限 #cp support-files/mysql.server /etc/rc.d/init.d/mysqld #chmod +x /etc/rc.d/init.d/mysqld (8)、建立并修改配置文件 # cp support-files/my-large.cnf /etc/my.cnf # vim /etc/my.cnf 添加以下行指定mysql数据文件的存放位置: datadir = /mydata/data (9)、更改环境变量 #vim /etc/profile.d/mysql.sh 添加: export PATH=/usr/local/mysql/bin:$PATH #. /etc/profile.d/mysql.sh (10)、添加到服务列表中并启动mysql # chkconfig --add mysqld # service mysql start
五、配置主服务器:
(1)编辑配置文件:
[root@node1 ~]# vim /etc/my.cnf server-id = 1 #60行标识本身的ID号 log-bin=mysql-bin #52行二进制日志,默认是启动的 binlog_format=mixed #55行使用混合模式
(2)创建复制帐号权限:
[root@node1 ~]# mysql mysql>GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO rpuser@'172.16.%.%' IDENTIFIED BY 'rpuser'; mysql> FLUSH PRIVILEGES; #刷新权限
六、配置从服务器:
(1)编辑配置文件:
[root@node2 ~]# vim /etc/my.cnf server-id = 20 #60行标识本身的ID号,和主服务器决不能相同 #log-bin=mysql-bin #52行关闭二进制日志 #binlog_format=mixed #55行关闭使用混合模式 #####设置从服务器为只读模式###### read-only=1 #注意从服务器不可有写模式 #####添加中继日志################ relay-log=/mydata/data/relay-mysql #中继日志 relay-log-index=relay-mysql.index #中继日志索引文件
【relay-log日志记录的是在复制过程当中,从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,而后SQL线程会读取relay-log日志的内容并应用到从服务器。】
(2)、登陆mysql查看线程:
查看启动线程
mysql> SHOW PROCESSLIST; +----+------+-----------+------+---------+------+-------+------------------+ | Id | User |Host | db | Command | Time | State | Info | +----+------+-----------+------+---------+------+-------+------------------+ | 1 | root | localhost | NULL | Query | 0| NULL | SHOW PROCESSLIST | +----+------+-----------+------+---------+------+-------+------------------+
根据结果显示:此时还未启动任何线程。
(3)、配置链接服务器:
命令参数解析:
mysql>helpCHANGE MASTER TO MASTER_BIND = 'interface_name' #将控制绑定在那个接口上 | MASTER_HOST = 'host_name' #主服务器地址 | MASTER_USER = 'user_name' #主服务器用户(刚才建立的) | MASTER_PASSWORD = 'password' #主服务器密码 | MASTER_PORT = port_num #工做端口 | MASTER_CONNECT_RETRY = interval #重试时间 | MASTER_HEARTBEAT_PERIOD = interval #每隔多长时间探测一下是否落后主服务器,主服务器是否在线 | MASTER_LOG_FILE = 'master_log_name' #指定从哪个二进制文件复制 | MASTER_LOG_POS = master_log_pos #指定哪个二进制文件的事件位置 | RELAY_LOG_FILE = 'relay_log_name' #中继日志 | RELAY_LOG_POS = relay_log_pos | MASTER_SSL = {0|1} #是否使用SSL功能 | MASTER_SSL_CA = 'ca_file_name' | MASTER_SSL_CAPATH = 'ca_directory_name' | MASTER_SSL_CERT = 'cert_file_name' | MASTER_SSL_KEY = 'key_file_name' | MASTER_SSL_CIPHER = 'cipher_list' | MASTER_SSL_VERIFY_SERVER_CERT = {0|1} | IGNORE_SERVER_IDS = (server_id_list) #将某些ID号忽略掉
配置从服务器链接主服务器:
mysql> CHANGE MASTER TO MASTER_HOST='172.16.18.7', -> MASTER_USER='rpuser', -> MASTER_PASSWORD='rpuser';
(4)启动从服务器线程:
mysql> START SLAVE;
(5)查看从服务器工做状态
mysql> SHOW SLAVE STATUS\G ***************************1. row *************************** Slave_IO_State: Waiting formaster to send event #I/O状态;接受主服务器发送状态 Master_Host: 172.16.18.7 #主服务器用户帐号 Master_User: rpuser #用户 Master_Port: 3306 #默认监听端口 Connect_Retry: 60 #重试时间间隔 Master_Log_File: mysql-bin.000002 #读取的二进制日志文件 Read_Master_Log_Pos: 107 #事件位置 Relay_Log_File:relay-mysql.000003 #当前读取的中继日志文件 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes #I/O线程已启动 Slave_SQL_Running: Yes #SQL线程已启动 Replicate_Do_DB: 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: 107 Relay_Log_Space: 966 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
七、测试
主服务器:
mysql> CREATE DATABASE yong; Query OK, 1 row affected (0.16sec) mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | yong | +--------------------+ 5 rows inset (0.03 sec)
从服务器:
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | yong | +--------------------+ 5 rows inset (0.16 sec)
这样主从复制功能就实现了。
基于事件点复制:
基于事件点复制:就是让从服务器从指定位置进行同步数据,而不是从头开始同步数据。
为了实现效果,这里将从服务器mysql的原有数据清除,其余配置不变:
[root@node2 ~]# service mysqld stop Shutting down MySQL. [ OK ] [root@node2 ~]# rm -rf /mydata/data/ [root@node2 ~]# cd /usr/local/mysql [root@node2 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/mydata/data/ [root@node2 mysql]# service mysqld start
清理完成启动成功进行半同步复制:
思路:首先在主服务器上彻底备份数据库,而后将数据导出在从服务器上应用便可。
一、主服务器数据库彻底备份
[root@node1~]# mysqldump -uroot --lock-all-tables --master-data=2 --events --all-databases > all.sql
更多方法请参考:http://pangge.blog.51cto.com/6013757/1291909
二、备份的数据复制至从服务器上
[root@node1 ~]# scp all.sql node2:/tmp/
三、从服务器将数据导入mysql
mysql> source /tmp/all.sql; 导入数据
四、查看主服务器上二进制文件及事件位置
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB |Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000002 | 190 | | | +------------------+----------+--------------+------------------+
五、配置链接服务器
从服务器链接主服务器:
mysql> CHANGE MASTER TOMASTER_HOST='172.16.18.7', -> MASTER_USER='rpuser', -> MASTER_PASSWORD='rpuser', -> MASTER_LOG_FILE='mysql-bin.000002', ->MASTER_LOG_POS=190; Query OK,0 rows affected (0.16 sec)
六、启动从服务器
mysql>START SLAVE;
七、查看从服务器状态
mysql> SHOW SLAVE STATUS\G *************************** 1.row *************************** Slave_IO_State: Waiting formaster to send event Master_Host: 172.16.18.7 Master_User: rpuser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 #指定的二进制文件 Read_Master_Log_Pos: 190 #指定的事件位置 Relay_Log_File:relay-mysql.000002 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: 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: 190 Relay_Log_Space: 405 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 1 row inset (0.00 sec)
八、测试
主服务器:
mysql> CREATE DATABASE testdb; Query OK, 1 row affected (0.01sec) mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | testdb | | yong | +--------------------+ 6 rows inset (0.01 sec)
从服务器:
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | testdb | | yong | +--------------------+ 6 rows inset (0.06 sec)
这样基于事件点主从复制就完成了!!
半同步主从复制
半同步的开启也是比较简单,只须要在Master与Slave服务器上都安装上半同步的插件并启用便可;
一、在主服务器上安装半同步插件:
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so'; #安装Master半同步插件 mysql> set global rpl_semi_sync_master_enabled = 1; #开启Master半同步功能 mysql> set global rpl_semi_sync_master_timeout = 1000;
二、查看启动结果:
mysql> show global status like 'rpl_semi%'; +--------------------------------------------+-------+ | Variable_name | Value | +--------------------------------------------+-------+ | Rpl_semi_sync_master_clients | 0 | | Rpl_semi_sync_master_net_avg_wait_time | 0 | | Rpl_semi_sync_master_net_wait_time | 0 | | Rpl_semi_sync_master_net_waits | 0 | | Rpl_semi_sync_master_no_times | 0 | | Rpl_semi_sync_master_no_tx | 0 | | Rpl_semi_sync_master_status | ON | #已启动 | Rpl_semi_sync_master_timefunc_failures | 0 | | Rpl_semi_sync_master_tx_avg_wait_time | 0 | | Rpl_semi_sync_master_tx_wait_time | 0 | | Rpl_semi_sync_master_tx_waits | 0 | | Rpl_semi_sync_master_wait_pos_backtraverse | 0 | | Rpl_semi_sync_master_wait_sessions | 0 | | Rpl_semi_sync_master_yes_tx | 0 | +--------------------------------------------+-------+
三、在从服务器上安装半同步插件:
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so'; #安装Slave半同步插件 mysql> set global rpl_semi_sync_slave_enabled = 1; #开启Slave半同步功能
四、重启IO线程:
mysql> stop slave io_thread; mysql>start slave io_thread;
五、查看主服务器启动结果:
mysql> show global status like 'rpl_semi%'; +--------------------------------------------+-------+ | Variable_name | Value | +--------------------------------------------+-------+ | Rpl_semi_sync_master_clients | 1 | #已经有一个客户端链接 | Rpl_semi_sync_master_net_avg_wait_time | 0 | | Rpl_semi_sync_master_net_wait_time | 0 | | Rpl_semi_sync_master_net_waits | 0 | | Rpl_semi_sync_master_no_times | 0 | | Rpl_semi_sync_master_no_tx | 0 | | Rpl_semi_sync_master_status | ON | | Rpl_semi_sync_master_timefunc_failures | 0 | | Rpl_semi_sync_master_tx_avg_wait_time | 0 | | Rpl_semi_sync_master_tx_wait_time | 0 | | Rpl_semi_sync_master_tx_waits | 0 | | Rpl_semi_sync_master_wait_pos_backtraverse | 0 | | Rpl_semi_sync_master_wait_sessions | 0 | | Rpl_semi_sync_master_yes_tx | 0 | +--------------------------------------------+-------+
六、查看定义的超时时间:
mysql> show global variables like '%rpl%'; +------------------------------------+-------+ | Variable_name | Value | +------------------------------------+-------+ | rpl_recovery_rank | 0 | | rpl_semi_sync_master_enabled | ON | | rpl_semi_sync_master_timeout | 1000 | | rpl_semi_sync_master_trace_level | 32 | | rpl_semi_sync_master_wait_no_slave | ON | +------------------------------------+-------+
七、在从服务器上查看定义结果:
mysql> show global status like 'rpl_semi%'; +----------------------------+-------+ | Variable_name | Value | +----------------------------+-------+ | Rpl_semi_sync_slave_status | ON |
八、测试:
主服务器:
[root@node1 ~]# mysql -e 'drop database yong;' [root@node1 ~]# mysql -e 'show databases;' +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test |
从服务器:
[root@node2 ~]# mysql -e 'show databases;' +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+
这样半同步复制就完成了,若想永久有效这些配置能够定义至配置文件中。
基于SSL的mysql主从复制
环境介绍:
Mysql版本:mysql-5.5.33
主服务器:node1:172.16.18.7 数据未改变
从服务器:node2:172.16.18.9 数据未改变
演示过程:
在主服务器上配置CA,而后分别为主从服务器颁发证书;
更多详细请参考http://pangge.blog.51cto.com/6013757/1280171
一、将主服务器作成CA服务器:
[root@node1 mysql]# cd /etc/pki/CA/ [root@node1 CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048) [root@node1 CA]# openssl req -x509 -new -key private/cakey.pem -out cacert.pem -days 3650 [root@node1 CA]# touch index.txt serial [root@node1 CA]# echo 01 >serial
二、主服务器申请证书
[root@node1 mysql]#mkdir ssl [root@node1mysql]# chown mysql.mysql ssl [root@node1 mysql]#cd ssl [root@node1ssl]# (umask 077;openssl genrsa -out master.key 1024) [root@node1ssl]# openssl req -new -key master.key -out master.csr [root@node1ssl]# openssl ca -in master.csr -out master.crt -days 365 [root@node1ssl]# chown -R mysql.mysql *
三、从服务器向主服务器申请证书
从服务器:
[root@node2 mysql]#mkdir ssl [root@node2 mysql]#chown mysql:mysql ssl [root@node2 ssl]#(umask 077;openssl genrsa -out slave.key 1024) [root@node2ssl]# openssl req -new -key slave.key -out slave.csr -days 365 [root@node2ssl]# scp slave.csr node1:/tmp
主服务器:
[root@node1~]# cd /tmp/ [root@node1tmp]# openssl ca -in slave.csr -out slave.crt -days 365 [root@node1tmp]# scp slave.crt node2:/usr/local/mysql/ssl/ [root@node1tmp]# scp /etc/pki/CA/cacert.pem node2:/usr/local/mysql/ssl/
从服务器:
[root@node2ssl]# chown -R mysql.mysql *
注意:在不管是在Master服务器上仍是在Slave服务器上必定要修改ssl目录及其文件的属主属主为mysql。
四、在主服务器上开启ssl功能:
[root@node1 ssl]#vim /etc/my.cnf
在mysqld字段中添加以下内容:
ssl ssl-ca=/etc/pki/CA/cacert.pem ssl-cert=/usr/local/mysql/ssl/master.crt ssl-key=/usr/local/mysql/ssl/master.key #####重启########### [root@node1 ssl]# service mysqld restart
验证ssl是否开启成功:
[root@node1 ~]# mysql mysql> SHOW GLOBAL VARIABLES LIKE '%ssl%'; +---------------+---------------------------------+ | Variable_name | Value | +---------------+---------------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /etc/pki/CA/cacert.pem | | ssl_capath | | | ssl_cert | /usr/local/mysql/ssl/master.crt | | ssl_cipher | | | ssl_key | /usr/local/mysql/ssl/master.key | +---------------+---------------------------------+ 7 rows inset (0.01 sec)
五、建立容许使用ssl链接的用户
mysql>help grant; #查看权限的定义方法,关于ssl的定义方式。 mysql>GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO rpssl@172.16.18.9 IDENTIFIED BY 'redhat' REQUIRE ssl; #这里的受权IP不可以使用引号引发来,否则后期必定会报错。 mysql>FLUSH PRIVILEGES;
六、在从服务器上开启ssl功能
[root@node2~]# vim /etc/my.cnf 依然在mysqld字段中添加 innodb_file_per_table= 1 #实现单表存储,可忽略添加 relay-log=/mydata/data/relay-mysql #中继日志 read-only=1 #只读选项 ssl #log-bin=mysql-bin #注释使用二进制,可选择性 #binlog_format=mixed #注释二进制类型,可选择性 ######重启########### [root@node2~]# service mysqld restart
验证ssl是否开启成功:
mysql> SHOW GLOBALVARIABLES LIKE '%ssl%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | | | ssl_capath | | | ssl_cert | | | ssl_cipher | | | ssl_key | | +---------------+-------+ 7 rows inset (0.01 sec)
七、从服务器链接主服务器
mysql> change master tomaster_host='172.16.18.7', -> master_user='rpssl', -> master_password='redhat', -> master_log_file='mysql-bin.000004', -> master_ssl=1, ->master_ssl_ca='/usr/local/mysql/ssl/cacert.pem', ->master_ssl_cert='/usr/local/mysql/ssl/slave.crt', -> master_ssl_key='/usr/local/mysql/ssl/slave.key'; ###########状态显示:############# mysql> show slave status\G *************************** 1.row *************************** Slave_IO_State: Master_Host: 172.16.18.7 Master_User: rpssl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 4 Relay_Log_File:relay-mysql.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: No Slave_SQL_Running: No Replicate_Do_DB: 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: 4 Relay_Log_Space: 107 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: Master_SSL_Cert:/usr/local/mysql/ssl/slave.crt Master_SSL_Cipher: Master_SSL_Key:/usr/local/mysql/ssl/slave.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: 0
八、启动从服务器线程:
mysql> start slave; mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.16.18.7 Master_User: rpssl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 362 Relay_Log_File: relay-mysql.000002 Relay_Log_Pos: 508 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: 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: 362 Relay_Log_Space: 660 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: Master_SSL_Cert:/usr/local/mysql/ssl/slave.crt Master_SSL_Cipher: Master_SSL_Key: /usr/local/mysql/ssl/slave.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
九、测试:
[root@node2 ssl]#mysql --ssl-ca=/usr/local/mysql/ssl/cacert.pem --ssl-cert=/usr/local/mysql/ssl/slave.crt--ssl-key=/usr/local/mysql/ssl/slave.key -urpssl -h172.16.18.7 –predhat mysql> \s -------------- mysql Ver 14.14 Distrib5.5.33, for linux2.6 (x86_64) using readline 5.1 Connection id: 3 Current database: Current user: rpssl@node2.magedu.com SSL: Cipher inuse is DHE-RSA-AES256-SHA #基于ssl已可用 Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.5.33-logMySQL Community Server (GPL) Protocol version: 10 Connection: 172.16.18.7via TCP/IP Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 TCP port: 3306 Uptime: 29 min 24sec Threads: 3 Questions:14 Slow queries: 0 Opens: 33 Flush tables: 1 Open tables:26 Queries per second avg: 0.007 --------------
至此,mysql基于ssl主从复制就完成了!!
总结:
本篇博客成功实现了主从基本复制,半同步主从复制,基于ssl主从复制。笔者演作了5遍实现了所有内容也遇见了各类问题,如本博文描述不到位或有错误请留言指出,如有关于主从复制中碰见不解问题也欢迎留言讨论!!
后续将更新mysql主主复制的相关内容,敬请继续关注!!