mysql 主从同步复制
mysql 主从同步复制
推荐阅读下面的这个文章:
http://blog.chinaunix.net/uid-20639775-id-3254611.html
下面是摘自上面连接的一个mysql 复制原理:
大致描述一下过程:从服务器的IO线程从主服务器获取二进制日志,并在本地保存为中继日志,然后通过SQL线程来在从上执行中继日志中的内容,从而使从库和主库保持一致。主从同步的详细过程如下:
1.主服务器验证连接。
2.主服务器为从服务器开启一个线程。
3.从服务器将主服务器日志的偏移位告诉主服务器。
4.主服务器检查该值是否小于当前二进制日志偏移位。
5.如果小于,则通知从服务器来取数据。
6.从服务器持续从主服务器取数据,直至取完,这时,从服务器线程进入睡眠,主服务器线程同时进入睡眠。
7.当主服务器有更新时,主服务器线程被激活,并将二进制日志推送给从服务器,并通知从服务器线程进入工作状态。
8.从服务器SQL线程执行二进制日志,随后进入睡眠状态。
#环境介绍:
eth0 eth1 master: 10.0.10.9 172.16.11.209 slave; 10.0.10.10 172.16.11.210
#同步数据库里面的bbs,blog,dedecms,并且以上几个库都运行一段时间了,存在数据,要增加slave。
#master端配置:
1 #修改my.cnf配置文件(增加下面的内容):
server-id = 1 # master端ID号 log-bin=/usr/local/mysql/mysql-bin #日志路径及文件名 binlog-do-db=bbs #同步bbs,blog,dedecms,此处关闭的话,就是除了不允许的,其它的库均同步 binlog-do-db=blog #没有“binlog-do-db” 这个选项的话,除了下面的不同步的库其他都同步 binlog-do-db=dedecms binlog-ignore-db = mysql #不进行mysql同步的库,以下同上 binlog-ignore-db = test binlog-ignore-db = information_schema
2 #创建同步账号:
/usr/local/mysql/bin/mysql -u root -p123456 GRANT REPLICATION SLAVE,FILE ON *.* TO ‘replication‘@‘10.0.10.%‘ IDENTIFIED BY ‘123456‘; flush privileges;
3 #锁表查看pos值和binlog日志名称:
提醒:这里要特别的记录一下内容:pos值 binlog 名称 后面要用到最好txt 记录一下
flush tables with read lock; show master status; mysql> show master status; +------------------+----------+--------------+-------------------------------------------------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+-------------------------------------------------------------+-------------------+ | mysql-bin.000006 | 1151 | | mysql,test,information_schema,mysql,test,information_schema | | +------------------+----------+--------------+-------------------------------------------------------------+-------------------+ 1 row in set (0.00 sec)
4 #备份文件(一下是2种方法,任选这里用了第一种):
1) 保存的是sql文件: /usr/local/mysql/bin/mysqldump -u root -p --all-databases > all.sql scp all.sql 10.0.10.10:/mnt/ 2) 将要同步的库打包发到slave上: tar -zcvf scp all.sql 10.0.10.10:/mnt/
5 #解开表的锁:
/usr/local/mysql/bin/mysql -u root -p123456 -e "unlock tables;"
###slave 端配置:
1 #修改my.cnf
server_id = 2 binlog-do-db=bbs #同步bbs,blog,dedecms,此处关闭的话,就是除了不允许的,其它的库均同步 binlog-do-db=blog #没有“binlog-do-db” 这个选项的话,除了下面的不同步的库其他都同步 binlog-do-db=dedecms binlog-ignore-db = mysql #不进行mysql同步的库,以下同上 binlog-ignore-db = test binlog-ignore-db = information_schema
2 #恢复数据库:
/usr/local/mysql/bin/mysql -u root -p </mnt/all.sql
3 #操作数据库接续:
stop slave;
change master to master_host=‘10.0.10.9‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000006‘,master_log_pos=1151;
start slave;
4 # 确认主从同步的成功:
mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.0.10.9 Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000006 Read_Master_Log_Pos: 1449 Relay_Log_File: slave-relay-bin.000002 Relay_Log_Pos: 581 Relay_Master_Log_File: mysql-bin.000006 Slave_IO_Running: Yes # yes 即正常 Slave_SQL_Running: Yes # 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: 1449 Relay_Log_Space: 754 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: 050bf314-81bf-11e3-90e9-000c29655eba Master_Info_File: /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) mysql>
5 ##验证mysql 同步是否成功或者在设置要同步的库里面创建一张表(上面在my.cnf里限制同步的库了,所以只能创建表来测试,如果想测试全库同步把 小贴士里面的内容在主从去掉重启mysql即可)。
1) 主上新创建一个新库 2) 从上验证是否同步正常
小贴士:
# 实现所有的库同步(即:包括mysql,test,bbs......): 在my.cnf里面取消这些即可: binlog-do-db=bbs #同步bbs,blog,dedecms,此处关闭的话,就是除了不允许的,其它的库均同步 binlog-do-db=blog #没有“binlog-do-db” 这个选项的话,除了下面的不同步的库其他都同步 binlog-do-db=dedecms binlog-ignore-db = mysql #不进行mysql同步的库,以下同上 binlog-ignore-db = test binlog-ignore-db = information_schema
本文出自 “振兴的空间” 博客,请务必保留此出处http://renzhenxing.blog.51cto.com/728846/1359398
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。