主服务器IP:192.168.58.128
从服务器IP:192.168.58.129
192.168.58.128主操作:
首先要保证主从两台数据库的版本,数据库表等一致, 本教程是基于5.7, 64位的mysql数据库, 系统是centos 5.7, 主从均为虚拟机
主节点配置:
编译/etc/my.cnf文件的[mysqld]下加入如下配置
server_id = 1 #主数据库端ID号
log-bin = mysql-bin #开启二进制日志
binlog-do-db = mytest #需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可
auto_increment_offset = 1 #这个参数一般用在主主同步中,用来错开自增值, 防止键值冲突
auto_increment_increment = 1 #这个参数一般用在主主同步中,用来错开自增值, 防止键值冲突
log_bin_trust_function_creators = 1 #将函数复制到slave
重启mysql
service mysqld restart
登陆mysql
mysql -uroot -p1234
配置从服务器登录的用户密码,权限等, slave 为登录用户名, 192.168.58.129 为从库的ip,slpass 为从服务器登录的密码,请根据自身的情况配置
grant replication slave,replication client on . to ‘slave’@‘192.168.58.129’ identified by ‘slpass’;
刷新权限
FLUSH PRIVILEGES;
查看主节点状态:
show master status\G;
从节点(192.168.58.129)配置:
编译/etc/my.cnf文件的[mysqld]下加入如下配置
server_id = 2 #从节点的ID号,不能和主节点的一样
relay_log = relay-log #开启中继日志
read_only = ON #只读开启,实现读写分离
重启从节点mysql并配置:
service mysqld restart
登陆从节点mysql
mysql -uroot -p1234
#设置复制的主节点数据库,pos位置()
CHANGE MASTER TO MASTER_HOST=‘192.168.58.128’,MASTER_USER=‘slave’,MASTER_PASSWORD=‘slpass’,MASTER_LOG_FILE=‘mysql-bin.000002’,MASTER_LOG_POS=2518;
上面语句参数说明:
MASTER_HOST:主库ip,
MASTER_USER:上面主库配置从服务器登录的用户密码时配置的用户名
MASTER_PASSWORD: 上面主库配置从服务器登录的用户密码时配置的用户密码
MASTER_LOG_FILE:主库的数据库日志文件, 参考上面show master status\G; 得出的File 字段的值,
MASTER_LOG_POS:参考上面show master status\G; 得出的Position 字段的值
开启主从复制并查看状态:
登录mysql后执行:START SLAVE;
登陆mysql后执行:show slave status\G;
红圈里面的 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes , 是已经配置成功的标识
前几天在测试主从服务器Mysql同步时遇到了从数据库显示Slave_IO_Running:Connecting; Slave_SQL_Running:Yes的问题。
下面列举几种可能的错误原因:
1.网络不通
2.账户密码错误
3.防火墙
4.mysql配置文件问题
5.连接服务器时语法
6.主服务器mysql权限
我的服务器ip:
主服务器ubuntu:192.168.16.105
从服务器ubuntu:192.168.16.115
逐项排除:
1:因为从服务器是虚拟机,网卡选择了桥接模式,ip地址确认在同一网段中,且互ping能通,排除网络问题。
2:主服务器创建了账号slave密码slave的权限账号,在主服务器可以登录slave帐号,排除帐号密码问题。
3:终端输入 sudo ufw disable 关闭防火墙, sudo ufw status查看防火墙,确认已关闭,排除防火墙原因。(sudo ufw enable打开防火墙)
4:配置文件
(1)查看主服务器配置文件:sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf,看第83行:确认log_bin和server-id已经取消注释,设置无错误。
(2)查看从服务器:
此处server-id只需要与主服务器不同即可,我设置为ip的末尾数字115。确认配置无错误,排除。
5.语法:
(1)查看主服务器二进制日志信息show master status;
(2)设置从服务器链接到master主服务器,确认语句无错误,排除。
注:
master_host:主服务器Ubuntu的ip地址
master_log_file: 前面查询到的主服务器日志文件名
master_log_pos: 前面查询到的主服务器日志文件位置
change master to master_host='192.168.16.105', master_user='slave', master_password='slave',master_log_file='mysql-bin.000011', master_log_pos=154;
6.权限:
(1)主服务器查看slave帐号,已设置登录ip为%
(2)在从服务器上登录主服务器slave帐号测试:
无法登录主服务器!打开主服务器配置文件发现43行有一条绑定主机ip的语句,问题出在这里!!!给它注释掉!保存退出。重启主服务器数据库:sudo service mysql restart
(3)重新测试从服务器上登录主服务器slave帐号:登录成功!
(4)重新进入从服务器链接master主服务器,start slave开启主从同步,输入show slave status \G查看从服务器状态,若开启不成功先stop slave,再start slave,可以看到Slave_IO_Runninghe和Slave_SQL_Running状态都是Yes,同步成功。
当我们配置好MySQL主主同步时,是可以实现主主同步,但是重启机器后或者其他原因导致MySQL无法同步了。
mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负责自己的slave mysql进程。
解决办法如下:
MariaDB [(none)]> stop slave; MariaDB [(none)]> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; MariaDB [(none)]> start slave; MariaDB [(none)]> show slave status\G
解决办法如下:
1、查看主服务器
MariaDB [(none)]> show master status\G
2、在从服务器上查看
问题所在:发现Master_Log_File没有对应。
3、出现Slave_IO_Running: No的机器上操作
MariaDB [(none)]> slave stop; MariaDB [(none)]>CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026', MASTER_LOG_POS=0; MariaDB [(none)]> slave start; MariaDB [(none)]> show slave status\G
到此问题就解决了!