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

2022-11-12 09:24:09
内容摘要
这篇文章主要为大家详细介绍了MySQL数据库互为主从配置方法分享,具有一定的参考价值,可以用来参考一下。 对此感兴趣的朋友,看看idc笔记做的技术笔记!mysql主从配置小记:共有四
文章正文

这篇文章主要为大家详细介绍了MySQL数据库互为主从配置方法分享,具有一定的参考价值,可以用来参考一下。

对此感兴趣的朋友,看看idc笔记做的技术笔记!

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后,创建用于同步的账号。添加账户:

代码如下:

 
INSERT INTO user (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'); 
刷新数据库:

代码如下:

 
FLUSH PRIVILEGES; 
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设置为主:停止同步:

代码如下:

 
slave stop; 
清空服务器master日志:

代码如下:

 
reset master; 
授权同步账号:

代码如下:

 
GRANT REPLICATION SLAVE ON *.* TO 'test'@'%' IDENTIFIED BY 'test'; 
刷新授权:

代码如下:

 
flush privileges; 
锁定数据库:

代码如下:

 
flush tables with read lock; 
将C设置为从:停止同步:

代码如下:

 
slave stop; 
配置同步信息:

代码如下:

 
CHANGE MASTER TO MASTER_HOST='10.1.10.28', MASTER_USER='test', MASTER_PASSWORD='test', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; 
将C设置为主:停止同步:

代码如下:

 
slave stop; 
清空服务器master日志:

代码如下:

 
reset master; 
授权同步账号:

代码如下:

 
GRANT REPLICATION SLAVE ON *.* TO 'test'@'%' IDENTIFIED BY 'test'; 
刷新授权:

代码如下:

 
flush privileges; 
锁定数据库:

代码如下:

 
flush tables with read lock; 
将A设置为从:停止同步:

代码如下:

 
slave stop; 
配置同步信息:

代码如下:

 
CHANGE MASTER TO MASTER_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服务停止同步:

代码如下:

 
slave stop; 
配置同步信息:

代码如下:

 
CHANGE MASTER TO MASTER_HOST='10.1.10.28', MASTER_USER='test', MASTER_PASSWORD='test', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; 
启动同步:

代码如下:

 
slave start; 
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服务停止同步:

代码如下:

 
slave stop; 
配置同步信息:

代码如下:

 
CHANGE MASTER TO MASTER_HOST='10.1.10.30', MASTER_USER='test', MASTER_PASSWORD='test', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; 
启动同步:

代码如下:

 
slave start; 
完成之后可以创建添加数据测试一下是否可以。下面是常见错误处理:1)change master导致的:Last_IO_Error: error connecting to master 'repl1@IP:3306' - retry-time: 60 retries2)在没有解锁的情况下停止slave进程:mysql> stop slave;ERROR 1192 (HY000): Can't execute the given command because you have active locked tables or an active transaction3)change master语法错误,落下逗号mysql> change master to-> master_host='IP'-> master_user='USER',-> master_password='PASSWD',-> master_log_file='mysql-bin.000002',-> master_log_pos=106;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'master_user='USER',master_password='PASSWD',master_log_file='mysql-bin.000002' at line 34)在没有停止slave进程的情况下change mastermysql> change master to master_host=‘IP', master_user='USER', master_password='PASSWD', master_log_file='mysql-bin.000001',master_log_pos=106;ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first5)A B的server-id相同:Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids;these ids must be different for replication to work (or the --replicate-same-server-id option must be used onslave but this does not always make sense; please check the manual before using it).查看server-idmysql> show variables like 'server_id';手动修改server-idmysql> set global server_id=2; #此处的数值和my.cnf里设置的一样就行mysql> slave start;6)change master之后,查看slave的状态,发现slave_IO_running 为NO

注:关于MySQL数据库互为主从配置方法分享的内容就先介绍到这里,更多相关文章的可以留意

代码注释

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!