Server1: 192.168.10.200 Master
Server2: 192.168.10.201 Slave
vip:192.168.10.202
master-slave (master1)
MySQL 版本最好一致
设置 master
创建给 slave 登录用的用户名密码:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'tbmysql'@'192.168.10.201' IDENTIFIED BY 'tbmysql'; #只允许192.168.10.201 通过tbmysql 登录; mysql> create database YunDa default charset utf8; #创建数据库名为YunDa
配置 my.cnf
# vim /etc/my.cnf
server-id=1 #主机ID,整数 log-bin=mysql-bin read-only=0 #主机读写权限,读写都可以 binlog-do-db=YunDa #记录日志的数据库,需要备份的数据,多个写多行 binlog-ignore-db=mysql 不记录日志的数据库:不需要备份的数据库,多个写多行 auto-increment-increment = 2 # 每次递增的步长 auto-increment-offset = 1 #初始值为1 #################以下是SLAVE配制############## replicate-do-db =YunDa #只复制某个库,多个写多行 replicate-ignore-db=mysql #不复制某个库 #replicate-ignore-db=test # replicate-ignore-db=information_schema relay-log=mysqld-relay-bin # 开启日志中继 log-slave-updates # slave将复制事件写进自己的二进制日志 #5.5# log-slave-updates = ON #5.1# log-slave-updates = 1
重启 mysql:
serivce mysqld restart
导出数据库
锁定数据库,不要退出 mysql shell
mysql>FLUSH TABLES WITH READ LOCK; mysql># flush tables with read lock;
新开一个终端,导出数据库
mysqldump --master-data -uroot -p YunDa > YunDa.sql
查看主服务器的状态
mysql> show master status\G; *************************** 1. row *************************** File: mysql-bin.000001 Position: 98 Binlog_Do_DB: YunDa Binlog_Ignore_DB: mysql 1 row in set (0.00 sec)ERROR: No query specified
记下 Position 和 File 的值。 解锁
mysql> UNLOCK TABLES; mysql> # unlock tables;
设置 slave(master2)
编辑 my.cnf
server-id=2 #主机ID,整数 log-bin=mysql-bin read-only=0 #主机读写权限,读写都可以 binlog-do-db=YunDa #记录日志的数据库,需要备份的数据,多个写多行 binlog-ignore-db=mysql 不记录日志的数据库:不需要备份的数据库,多个写多行 auto-increment-increment = 2 # 每次递增的步长 auto-increment-offset = 1 #初始值为1 #################以下是SLAVE配制############## replicate-do-db =YunDa #只复制某个库,多个写多行 replicate-ignore-db=mysql #不复制某个库 #replicate-ignore-db=test # replicate-ignore-db=information_schema relay-log=mysqld-relay-bin # 开启日志中继 log-slave-updates # slave将复制事件写进自己的二进制日志 #5.5# log-slave-updates = ON #5.1# log-slave-updates = 1
导入 master 导出的数据库:
mysql> create database hello default charset utf8; mysql -uroot -p YunDa< YunDa.sql
配置 master 信息:
mysql> stop slave; #此处有的版本语法是slave stop; mysql> CHANGE MASTER TO -> MASTER_HOST='192.168.10.200', //主服务器的IP地址 -> MASTER_USER='tbmysql', //同步数据库的用户 -> MASTER_PASSWORD='tbmysql', //同步数据库的密码 -> MASTER_CONNECT_RETRY=60, // 如果从服务器发现主服务器断掉,重新连接的时间差(秒) -> MASTER_LOG_FILE='mysql-bin.000001', //主服务器二进制日志的文件名(前面要求记住的 File 参数) -> MASTER_LOG_POS=98; //日志文件的开始位置(前面要求记住的 Position 参数)
mysql> CHANGE MASTER TO MASTER_HOST='192.168.10.200', MASTER_USER='tbmysql', MASTER_PASSWORD='tbmysql', MASTER_CONNECT_RETRY=60, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98; mysql > slave start;
重启 master, slave: systemctl restart mysqld
查看 slave 状态:
进入 slave mysql:
mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Connecting to master Master_Host: 192.168.100.200 Master_User: tbmysql Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 98 Relay_Log_File: mysqld-relay-bin.000001 Relay_Log_Pos: 98 Relay_Master_Log_File: mysql-bin.000001 Replicate_Do_DB: hello Replicate_Ignore_DB: mysql,test,information_schema Exec_Master_Log_Pos: 98 Relay_Log_Space: 98 Until_Log_Pos: 0 Seconds_Behind_Master: NULL 1 row in set (0.00 sec)
注意一定要有下面两项,没有的话查看错误日志(less /var/log/mysqld.log):
Slave_IO_Running: Yes Slave_SQL_Running: Yes
同步错误处理方式:
1、从库的约束比主库更多写造成 slave stop; set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; slave start; 2、主库删除的表在从库中不存在,导致从库在遇到删除不存在表的错误时无法继续同步 解决方法:利用slave-skip-errors参数,跳过对于的1146错误(这个参数是一个只读的,需要在配置文件中修改,并重启从库) a、在my.cnf的[mysqld]下面添加slave_skip_errors=11462 b、重启从库 service mysql restart c、在从库上启动同步 d、去掉my.cnf中的slave_skip_errors=1146 e、重启从库 f、启动从库复制
转载于:https://blog.51cto.com/zjcookies/118934