目标:搭建两台MySQL服务器,一台作为主服务器,一台作为从服务器,实现主从复制
linux搭建环境以及linux安装mysql,请自行网上查询
环境:
主数据库: 192.168.18.4
从数据库: 192.168.18.5
原理:
Mysql>CREATE USER 'root '@'%' IDENTIFIED BY 'mysql';
授权给从库账号和密码
Mysql>GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.18.5' IDENTIFIED BY 'mysql';
Mysql>FLUSH PRIVILEGES;
3、配置主数据库
1)要主数据库,你必须要启用二进制日志(binary logging),并且创建一个唯一的Server ID,这步骤可能要重启MySQL。
2)主服务器发送变更记录到从服务器依赖的是二进制日志,如果没启用二进制日志,复制操作不能实现(主库复制到从库)。
3)复制组中的每台服务器都要配置唯一的Server ID,取值范围是1到(232)−1,你自己决定取值。
4)配置二进制日志和Server ID,你需要关闭MySQL和编辑my.cnf或者my.ini文件,在 [mysqld] 节点下添加配置。
5)下面是启用二进制日志,日志文件名以“master-bin”作为前缀,Server ID配置为1,如下:
log-bin=mysql-bin
#标识唯一id(必须),一般使用ip最后位
server-id=100
#不同步的数据库,可设置多个
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=mysql
#指定需要同步的数据库(和slave是相互匹配的),可以设置多个
binlog-do-db=mydb
service mysqld restart
mysql -uroot -p
mysql> show master status;
注意:记录好File和Position,后面要用
6、配置从数据库:
1)从服务器,同理,要分配一个唯一的Server ID,需要关闭MySQL,修改好my.cnf后再重启,如下:
#开启二进制日志
log-bin=mysql-bin
server-id=101
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=mysql
#与主库配置保持一致
replicate-do-db=mydb
replicate-ignore-db=mysql
slave-skip-errors=all
slave-net-timeout=60
2)在从服务器里配置连接主服务器的信息:
进入mysql: master_log_file、master_log_pos一定要和主库保持一致
mysql -uroot -p
Mysql>stop slave;
Mysql>change master to master_host='192.168.18.4', master_port=3306, master_user='root', master_password='mysql', master_log_file='master-bin.000008', master_log_pos=106;
说明:192.168.18.4是主服务器的id,master_log_file='master-bin.000008'是主服务器的File(你主服务器查出来的是什么就写什么),master_log_pos=106是主服务器的Position(你主服务器查出来的是什么就写什么);每次重新启动主服务器,master_log_file和master_log_pos都会变。
3)查看状态
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.137.130
Master_User: zhu1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000010
Read_Master_Log_Pos: 591960
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 592106
Relay_Master_Log_File: master-bin.000010
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
4)若 Slave_SQL_Running: no 请重复执行以下内容,直至yes:
mysql>stop slave;
mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql>start slave;
遇到问题解决
1、Mysql 配置主从时出现如下错误:The slave I/O thread stops because master and slave have equal MySQL server ids;
排查错误
分别在主从数据库中执行如下sql, 并必读两边的server_id 是否一样,一样则修改my.cnf设置成不一样:
show variables like '%server_id%';
分别在主从数据库中执行如下sql, 并必读两边的server_uuid 是否一样,如果一样则删除从数据库的数据目录下的auto.cnf:
show variables like '%uuid%';
确认主从数据库的数据host是否一样,如果主从数据库的host一样也会报这个错误。
网友评论