Mysql主多从同步配置

时间:2022-09-14 13:49:34

Mysql主多从同步配置

架构

一主多从和一主一从的原理是一样的:

graph LR
master-->slave1
master-->slave2
master-->slave...

环境

master:192.168.101

MYSQL版本:5.1.48-community-log

slave1:192.168.2.182

MYSQL版本:5.1.48-community-log

slave2:192.168.2.111

MYSQL版本:5.1.48-community-log

so...1 vs 2

master配置

配置my.cnf

[root@mysql101 ~]# vi /etc/my.cnf
[mysqld]
datadir = /data/mysql
socket = /tmp/mysql.sock
server-id = 1
log-bin=mysql-bin
binlog-do-db=YYY //需要同步的数据库
binlog-ignore-db=mysql //被忽略的数据库
binlog-ignore-db=information-schema //被忽略的数据库

说明:完成以上配置后重启mysql服务。


创建同步用户

mysql> grant replication slave on *.* to 'affairlog'@'192.168.2.182' identified by 'pwd123';

//在slave1上登陆成功

mysql> grant replication slave on *.* to 'affairlog'@'192.168.2.111' identified by 'pwd123';

//在slave2上登陆成功

mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000087
Position: 106
Binlog_Do_DB: YYY
Binlog_Ignore_DB: mysql,information-schema
1 row in set (0.00 sec)

slave配置

[root@mysql182 ~]# vi /etc/my.cnf
[mysqld]
datadir = /data/mysql
socket = /tmp/mysql.sock
server-id=182
master-host=192.168.3.101
master-user= affairlog
master-password=pwd123
master-port=3306
master-connect-retry=60
replicate-do-db=YYY //同步的数据库
replicate-ignore-db=mysql //被忽略的数据库
replicate-ignore-db=information-schema //被忽略的数据库

说明:完成配置后重启mysql服务。
修改slave2上的配置文件my.cnf,和上面类似,只是把server-id改下,为了方便,我都用了相应的ip某位,so,slave2上我设置的server-id是111。


同步配置

进入两个slave机中的mysql。

mysql>start slave;

mysql>show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

如果两个slave中的Slave_IO_Running、Slave_SQL_Running状态均为Yes则表明设置成功。


常见问题

错误1:

Slave_IO_Running: No或者Slave_SQL_Running: No

解决办法:

先停止slave:

mysql> slave stop;

master:

mysql> show master status\G;

*************************** 1. row ***************************
File: mysql-bin.000087
Position: 1845
Binlog_Do_DB: YYY
Binlog_Ignore_DB: mysql,information-schema
1 row in set (0.00 sec)

到slave手动同步:

mysql>change master to
>master_host='192.168.3.101',
>master_user='affairlog',
>master_password='pwd123',
>master_log_file='mysql-bin.000087',
>master_log_pos=1845;

启动slave服务:

mysql> slave start;

再次查看Slave_IO_Running、Slave_SQL_Running状态,为Yes则表明设置成功。


错误2:

ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first

解决办法

停掉slave服务

mysql> slave stop;

重置slave服务

mysql> reset stop;

再执行一次change命令

mysql>change master to
>master_host='192.168.3.101',
>master_user='affairlog',
>master_password='pwd123',
>master_log_file='mysql-bin.000087',
>master_log_pos=1845;

启动slave服务

mysql> slave start;

再次查看Slave_IO_Running、Slave_SQL_Running状态,为Yes则表明设置成功。

PS:
Slave_IO_Running:连接到主库,并读取主库的日志到本地,生成本地日志文件
Slave_SQL_Running:读取本地日志文件,并执行日志里的SQL命令。


原文地址:http://blog.sina.com.cn/s/blog_4c197d4201017qjs.html