一 、系统环境:Centos 6.5
- mysql版本:mysql-5.5.25a
- Master:192.168.4.9
- Slave :192.168.4.10
二、主从配置需要注意的点
- 主从服务器操作系统版本尽量保持一致
- Master和Slave版本要一致
- Slave导入的Master备份数据要完整
- Master开启了二进制日志
- Slave开启了中继日志
- Master和Slave server_id值,唯一
三、主从配置步骤
Master配置
- 查看server-id是否唯一
- 建立主从授权用户
- 确认二进制日志是否打开
- 导出数据库数据(备份数据)
- 将备份数据传输给Slave
- Master和Slave服务器时间一致
Slave配置
- 查看server-id是否唯一
- 导入Master导出的数据(还原备份)
- 建立主从关系
- Slave和Master服务器时间一致
四、正式开始搭建
Master配置
1、导出Master数据
mysqldump -h192.168.4.9 -uroot -p123456 --quick --routines --master-data=2 --single-transaction --all-databases > data.sql
这里最主要的是--master-data=2 这个参数,否则在建立主从时找不到pos和binlog位置
[[email protected] mysql]# /usr/local/mysql/bin/mysqldump -h192.168.4.9 -uroot -p123456 --quick --routines --master-data=2 --single-transaction --all-databases > data.sql
2、检查server_id
[[email protected] mysql]# cat /data/mysql/my.cnf |grep server-id
server-id = 1
3、检查binlog是否开启
[[email protected] mysql]# cat my.cnf |grep "log-bin"
log-bin=/data/mysql/mysql-bin
4、将备份传输给Slave
这里使用scp,大数据量,应该采取其他方式
[[email protected] ~]# scp /data/mysql/data.sql [email protected]:/data/
5、创建并授权主从用户
grant replication slave on *.* to [email protected]‘%‘ identified by ‘123456‘;
flush privileges;
Slave配置
1、查看server-id是否唯一
[[email protected] ~]# cat /data/mysql/my.cnf |grep server-id
server-id = 2
2、备份还原
[[email protected] ~]# /usr/local/mysql/bin/mysql -uroot -h192.168.4.10 -p </data/data.sql
登入数据库确认是否数据恢复完整
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wordpress_01 |
+--------------------+
5 rows in set (0.00 sec)
检查数据完整性,可以简单的抽查一些表的数据是否完整,我是看的行数
mysql> select count(*) from wp_usermeta;
+----------+
| count(*) |
+----------+
| 16 |
+----------+
3、建立主从关系
首先查看一下pos号和binlog位置
[[email protected] ~]# cat /data/data.sql |head -26
CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000016‘, MASTER_LOG_POS=617; #主要是看这一行
登入数据库建立主从
CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000002‘, MASTER_LOG_POS=107, MASTER_HOST=‘192.168.4.9‘,MASTER_PORT=3306,MASTER_USER=‘repl‘,MASTER_PASSWORD=‘123456‘;
slave start; #启动从库
show slave status \G;查看主从状态
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.4.9 #Master 服务器IP
Master_User: repl #Master 创建的主从同步用户
Master_Port: 3306 #Master 服务器端口
Connect_Retry: 60
Master_Log_File: mysql-bin.000002 #Master binlog
Read_Master_Log_Pos: 107 #Master 日志 pos号
Relay_Log_File: relaylog.000002 #中继日志
Relay_Log_Pos: 253 #中继日志pos号
Relay_Master_Log_File: mysql-bin.000002 #中继日志文件
Slave_IO_Running: Yes #Slave IO 状态
Slave_SQL_Running: Yes #Slave 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 #执行主日志pos号
Relay_Log_Space: 402
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 in set (0.00 sec)
Read_Master_Log_Pos和Exec_Master_Log_Pos 值一致时可以认定为主从同步成功
Seconds_Behind_Master 主从是否在同步,是否有延迟
Master_Log_File: mysql-bin.000002 Master binlog是否正确
三项都没有问题,可以认证为主从同步成功
五、主从搭建过程中的问题
- 确保备份数据的完整性
- 确保导入时的备份,完全导入
- 认真进行数据验证
案例
1、在主从建立时很容易产生 1062和1032,这样的报错,但是并不影响数据的完整性
解决方式:slave-skip-errors = 1062,1032
2、在数据导入从库时,从库会不断的产生binlog,所以在导入数据之前,
可以暂时将从库的binlog关闭,解决数据量的增长,或者等同步完成时,进行
对binlog数据的清理。
binlog 清理方式:
purge master logs to ‘mysql-bin.000022‘; #删除mysql-bin.000022这个之前的Log,根据实际情况判断删除