zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

mysql数据库互为主从配置方法分享

2023-06-13 09:14:33 时间
mysql主从配置小记:
共有四台机器:A(10.1.10.28),B(10.1.10.29),C(10.1.10.30),D(10.1.10.31)。
配置后结果:A-C互为主从,B为A的slave,D为C的slave。

0)准备工作
在四台机器上面安装好mysql后,创建用于同步的账号。
添加账户:
复制代码代码如下:

INSERTINTOuser(Host,User,Password,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)VALUES("%","test",password("test"),"Y","Y","Y","Y","Y","Y");

刷新数据库:
复制代码代码如下:

FLUSHPRIVILEGES;

1)配置A-C互为主从
修改A配置文件为:
复制代码代码如下:
server-id=1
replicate-do-db=test
replicate-do-db=test_admin
log-bin=mysql-bin
log-slave-updates
replicate-wild-do-table=test.%
replicate-wild-do-table=test_admin.%
binlog-ignore-db=mysql
slave-skip-errors=all

修改C配置文件为:
复制代码代码如下:
server-id=3
binlog-do-db=test
binlog-do-db=test_admin
log-bin=mysql-bin
log-slave-updates
replicate-wild-do-table=test.%
replicate-wild-do-table=test_admin.%
binlog-ignore-db=mysql
slave-skip-errors=all

重启mysql是配置生效
将A设置为主:
停止同步:
复制代码代码如下:
slavestop;

清空服务器master日志:
复制代码代码如下:
resetmaster;

授权同步账号:
复制代码代码如下:
GRANTREPLICATIONSLAVEON*.*TO"test"@"%"IDENTIFIEDBY"test";

刷新授权:
复制代码代码如下:
flushprivileges;

锁定数据库:
复制代码代码如下:
flushtableswithreadlock;

将C设置为从:
停止同步:
复制代码代码如下:
slavestop;

配置同步信息:
复制代码代码如下:
CHANGEMASTERTOMASTER_HOST="10.1.10.28",MASTER_USER="test",MASTER_PASSWORD="test",MASTER_LOG_FILE="mysql-bin.000001",MASTER_LOG_POS=107;

将C设置为主:
停止同步:
复制代码代码如下:
slavestop;

清空服务器master日志:
复制代码代码如下:
resetmaster;

授权同步账号:
复制代码代码如下:
GRANTREPLICATIONSLAVEON*.*TO"test"@"%"IDENTIFIEDBY"test";

刷新授权:
复制代码代码如下:
flushprivileges;

锁定数据库:
复制代码代码如下:
flushtableswithreadlock;

将A设置为从:
停止同步:
复制代码代码如下:
slavestop;

配置同步信息:
复制代码代码如下:
CHANGEMASTERTOMASTER_HOST="10.1.10.30",MASTER_USER="test",MASTER_PASSWORD="test",MASTER_LOG_FILE="mysql-bin.000001",MASTER_LOG_POS=107;

2)将B设置为A的从
复制代码代码如下:
server-id=2
replicate-do-db=test
replicate-do-db=test_admin
log-bin=mysql-bin
log-slave-updates
replicate-wild-do-table=test.%
replicate-wild-do-table=test_admin.%
binlog-ignore-db=mysql
slave-skip-errors=all


重启mysql服务
停止同步:
复制代码代码如下:
slavestop;

配置同步信息:
复制代码代码如下:
CHANGEMASTERTOMASTER_HOST="10.1.10.28",MASTER_USER="test",MASTER_PASSWORD="test",MASTER_LOG_FILE="mysql-bin.000001",MASTER_LOG_POS=107;

启动同步:
复制代码代码如下:
slavestart;

3)将D设置为C的从
复制代码代码如下:
server-id=4
replicate-do-db=test
replicate-do-db=test_admin
log-bin=mysql-bin
log-slave-updates
replicate-wild-do-table=test.%
replicate-wild-do-table=test_admin.%
binlog-ignore-db=mysql
slave-skip-errors=all

重启mysql服务
停止同步:
复制代码代码如下:
slavestop;

配置同步信息:
复制代码代码如下:
CHANGEMASTERTOMASTER_HOST="10.1.10.30",MASTER_USER="test",MASTER_PASSWORD="test",MASTER_LOG_FILE="mysql-bin.000001",MASTER_LOG_POS=107;

启动同步:
复制代码代码如下:
slavestart;

完成之后可以创建添加数据测试一下是否可以。
下面是常见错误处理:

1)
changemaster导致的:
Last_IO_Error:errorconnectingtomaster"repl1@IP:3306"-retry-time:60retries
2)
在没有解锁的情况下停止slave进程:
mysql>stopslave;
ERROR1192(HY000):Can"texecutethegivencommandbecauseyouhaveactivelockedtablesoranactivetransaction
3)
changemaster语法错误,落下逗号
mysql>changemasterto
->master_host="IP"
->master_user="USER",
->master_password="PASSWD",
->master_log_file="mysql-bin.000002",
->master_log_pos=106;
ERROR1064(42000):YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear"master_user="USER",
master_password="PASSWD",
master_log_file="mysql-bin.000002"atline3

4)
在没有停止slave进程的情况下changemaster
mysql>changemastertomaster_host=‘IP",master_user="USER",master_password="PASSWD",master_log_file="mysql-bin.000001",master_log_pos=106;
ERROR1198(HY000):Thisoperationcannotbeperformedwitharunningslave;runSTOPSLAVEfirst

5)
AB的server-id相同:
Last_IO_Error:Fatalerror:TheslaveI/OthreadstopsbecausemasterandslavehaveequalMySQLserverids;
theseidsmustbedifferentforreplicationtowork(orthe--replicate-same-server-idoptionmustbeusedon
slavebutthisdoesnotalwaysmakesense;pleasecheckthemanualbeforeusingit).
查看server-id
mysql>showvariableslike"server_id";
手动修改server-id
mysql>setglobalserver_id=2;#此处的数值和my.cnf里设置的一样就行
mysql>slavestart;
6)changemaster之后,查看slave的状态,发现slave_IO_running为NO