mysql主主复制汇总整理

一、Mysql主主、主从复制主要思路:

1、mysql复制实质:

就是其他的MySQL数据库服务器将这个数据变更的二进制日志在本机上再执行一遍,因此非常重要的一点是mysql数据库中必须要开启二进制日志

2、Mysql主从复制:

就是A为主数据库,B为从数据库,B将A中数据变更的二进制日志在它数据库中重新执行一遍;(B只会随着A改变,A不会随着B改变

3、Mysql主主复制:

就是A数据库、B数据库互相同步数据,A与B都将彼此的数据变更的二进制日志在自身数据库中重新执行一遍,就是两个主从复制的整合;(A与B互相跟随彼此进行改变

二、Mysql主主复制操作步骤:

假定A库、B库要实现主主复制:

1、在主库中创建从库登录的账号、密码,并对账号进行授权:

创建账号:

CREATE USER ‘myuser‘@‘localhost‘ IDENTIFIED BY ‘mypassword‘;

授权:

2、修改mysql配置文件:一般Linux中的MySQL配置文件都在/etc/my.cnf(windows中的配置文件为mysql.ini)

A库配置文件增加以下配置信息:(信息见mysql_copy_update_info.txt文件)

#注意在mysql配置文件中填写一下信息的位置,必须为此位置,即[mysqld]标签下面
[mysqld]

#任意自然数n,只要保证两台MySQL主机不重复就可以了
server-id=1

#起始值。一般填第n台主MySQL。此时为第一台主MySQL
auto_increment_offset=1

#步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_increment=2

#开启二进制日志
log-bin=mysql-bin

log-error=/mysqldata/mysqld.log

pid-file=/mysqldata/mysqld.pid

#与此从库相对应的主库的ip地址
master-host=192.168.15.185

#在相对应的主库中,此库可登录的账号
master-user=backup

#在相对应的主库中,此库可登录的密码
master-password=123456

#在相对应的主库中登录的端口号
master-port=3306

#要同步的数据库,默认所有库,指定多个库添加新行就可以
replicate-do-db=phpcmsv9

#不要同步的数据库,指定多个库添加新行就可以
replicate-ignore-db=mysql

master-connect-retry=60

B库配置文件增加的配置信息与A库中增加信息完全一致,除了server-id与auto_increment_offset不同外;

3、设置编码格式(否则中文容易出现乱码):

增加的配置信息如下圈出信息,如果有些标签[]中在mysql配置文件中默认没有的,自己手动添加(详情见character_encoding_info.txt文件)

[mysql]

default-character-set=utf8

[mysqld]

default-character-set = utf8
character_set_server = utf8

[mysqld_safe]

default-character-set = utf8

[mysql.server]

default-character-set = utf8

[client]

default-character-set = utf8

4、重新启动mysql数据库:

Mysql命令:service mysqld restart;

5、查看相对应的主库的二进制文件名及其位置:

在主库中用mysql命令:show master status;

6、在本库中告知相对应主库二进制文件名及其位置的信息:

A为主库,B为从库时,在B库中执行mysql命令:(详细信息请见文件change_master_to_info.txt文件)

change master to master_host=‘172.20.109.14‘,master_user=‘mysql913‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000056‘,master_log_pos=151744220;

B为主库,A为从库,在A库中执行同上命令,参数进行适当修改;

7、分别启动各自的slave:

分别在各自库中执行mysql命令:slave start;

8、查看slave启动后的状态:

分别在各自库中执行mysql命令:SHOW SLAVE STATUS\G;

主要是观察:

(1)红圈的两个参数是否都是YES,如果不是,那么就是出现了异常,查看第一行的错误提示,进行异常处理,对于常见的异常处理见四中进行解决;

(2)红线为复制的数据库,查看是否是自己需要复制的数据库,如果不正确,那么久需要修改mysql的配置文件中的信息,重新从头执行一遍;

9、完成主主复制配置,进行数据测试:

三、Mysql主从复制操作步骤:

与上述主主复制步骤类似,只是主主复制对两个库都进行操作,主从复制只需要对从库进行change master to操作,对主库只需要配置开启二进制、server-id即可,对从库配置信息同上;

四、如何在现有主主上添加库:

1、在使用的mysql上先根据需要创建库,并创建需要的表添加数据;

2、在另一台mysql上同样创建对应的库,并将对应库中的数据copy过来;

3、分别修改mysql的配置文件中的replicate-do-db新增加一行,值就是要新添加的库,然后重新启动mysql服务;

4、然后通过linux命令进入mysql,查看slave是否正确启动,如果启动有异常进行处理,确保正常启动;

5、新添加的库就到了主主复制链中,进行测试即可;

五、如何在现有主主上去掉某个库:

1、分别修改mysql对应的配置文件,将需要去掉的库的replicate-do-db注释掉或者删掉;

2、重新启动mysql服务;

3、进去mysql中,分别查看mysql的日志文件信息:change master status;

4、分别重新执命令行start slave until MASTER_LOG_FILE="mysql-bin.000075", MASTER_LOG_POS=216,将从库中读取二进制日志信息位置切换到对应主库现有位置中去;

5、完成对某个库的去掉功能;

六、Mysql主主和主从复制常见异常处理:

1、Slave_IO_State: Waiting to reconnect after a failed registration on master异常:

解决方法:

在对应主库上从新对对应账号执行授权命令

grant replication slave on *.* to "repl‘@‘%‘ identified by ‘sangfordb‘;

FLUSH PRIVILEGES;

然后重新stop slave 和start slave就可以

2、Slave_IO_State:connecting to master

解决方法:

原因是此账号无法连接主库,查看账号远程登录?Linux防火墙端口开放?

3、slave_sql_running:NO异常:

解决方法:

跳过执行报错的sql就好了,在从库中执行mysql命令:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1(等号后为几看自己有几个错误了,不知道的就尝试,直到SHOW SLAVE STATUS查看结果该异常解决掉为止)

4、Slave启动正常,就是不同步数据:

原因:出现此情况的原因就是,从库中获取主库的二进制信息的文件名和位置与主库中最新数据位置不一致;

解决方法:查看主库的二进制文件名和信息:change master status;然后在从库中执行:start slave until MASTER_LOG_FILE="mysql-bin.000075", MASTER_LOG_POS=216;命令,将从库中获取主库二进制文件信息更新到主库现有状态,如果是主主复制那就在两台mysql中分别执行即可;

七、Mysql主主和主从复制服务器异常停止后处理思路:

(1)mysql或slave出现异常管理员如何获知:

1、slave异常获知:编写一个shell脚本,用nagios监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主主或主从出问题了,发短信警报;

(2)管理员手动处理异常的步骤:

直接将出现异常的那台服务器或mysql重新启动就好了,另一台数据库中改动的数据会自动同步到重新启动的mysql库中;

八、Mysql主主复制中某个库或某个表因为数据原因不能同步异常:

1、将该库或该表未同步的数据导出.sql文件,通过命令:

mysqldump -uroot -p --master-data --single-transaction -R --databases zzcp03 > zzcp03.sql

2、在导出的sql里面查找当前的日志文件以及位置(change master to …)

3、将另外对应的数据库中slave stop了,然后让salve从sql文件中的位置处开始,通过命令实现:

start slave until MASTER_LOG_FILE="mysql-bin.000075", MASTER_LOG_POS=769;

4、然后让salve start起来;

5、查看两台mysql中的slave是否正常启动,不是不正常进行处理,确保正常启动,这样就可以完成该表的数据同步了;

附两个功能代码:

导出某个库或表在slave不同步信息期间的增、删、修数据信息,并且带有二进制文件信息:

mysqldump -uroot -p --master-data --single-transaction -R --databases zzcp03 > zzcp03.sql 

让slave获取的master二进制信息从指定的位置处开始:

start slave until MASTER_LOG_FILE="mysql-bin.000075", MASTER_LOG_POS=769;

原文地址:https://www.cnblogs.com/lsy-blogs/p/8266865.html

时间: 2024-10-09 20:53:15

mysql主主复制汇总整理的相关文章

inotify+rsync+mysql主主复制+keepalived实现zabbix高可用

思路:主备机通过inotify+rsync实现文件同步,通过mysql主主复制实现数据同步,同一时刻只有一台服务器能对外提供zabbix服务,web端登陆虚ip访问,被监控主机通过配置虚ip来完成监控. 配置: 主机 ip 操作系统 zabbix版本 mysql版本 inotify版本 rsync版本 备注 zabbix-server01 172.27.9.80 Centos7.3.1611 zabbix_server (Zabbix) 3.4.10 5.7.22 3.14 3.1.2 关闭防火

MySQL 主主复制

MySQL的主主复制就是两台 mysql 节点互为主从.搭建起来 mysql 主从,再来搭建主主复制就非常简单了. 视频链接:http://www.roncoo.com/course/view/658088f6e77541f5835b61800314083e 在原来主从的基础上做如下操作: 1.开启原从节点的 binlog 日志 2.原从节点创建读取副本的用户 3.在原主节点中让 master 指向从节点 4.在原主节点执行 start slave 命令 以上步骤即可完成主主节点的配置 下面有一

MySQL集群(二)之主主复制

前面介绍了主从复制,这一篇我将介绍的是主主复制,其实听名字就可以知道,主主复制其实就是两台服务器互为主节点与从节点.接下来我将详细的给大家介绍,怎么去配置主主复制! 一.主从复制中的问题 1.1.从节点占用了主节点的自增id 环境: 主节点:zyhserver1=1.0.0.3 从节点:udzyh1=1.0.0.5 第一步:我们在主节点中创建一个数据库db_love_1,在创建一个表tb_love(里面有id自增和name属性). create database db_love_1; use d

MySQL 主从复制、主主复制、半同步复制

MySQL 复制 =============================================================================== 概述: =============================================================================== MySQL Replication:   1.主从复制的目的和架构 ★Master/Slave(主/从) Master: write/read Slave

mysql主从复制和主主复制

一.准备(主从都需要配置): yum -y install mysql mysql-server #安装mysql yum -y install ntpdate #安装时间同步 echo '*/1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root #配置网络时间同步 service mysqld start #启动服务 chkconfig --add mysqld #添加为系

centos lvs+keepalived+mysql实现mysql数据库热备主主复制-亲测ok

实验环境: linux:centos6.6 虚拟ip(vip):192.168.135.199 mysql master:192.168.20.193 mysql slave:192.168.20.195 (这里只是为了后文方便区分,一个叫master,一个叫slave,其实在主主复制中,都是master也都是slave,没有主从之分) mysql的版本: [[email protected] ~]# mysql -V mysql  Ver 14.14 Distrib 5.1.73, for r

mysql主-主复制

设置主-主复制: 1.在两台服务器上各自建立一个具有复制权限的用户: 2.修改配置文件: # 主服务器上 [mysqld] server-id = 10 log-bin = mysql-bin relay-log = relay-mysql relay-log-index = relay-mysql.index auto-increment-increment = 2 auto-increment-offset = 1 # 从服务器上 [mysqld] server-id = 20 log-bi

mysql的主从、主主及半同步复制

mysql复制 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接

keepalived+mysql双主复制高可用方案

MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了双主对外的统一接口以及自动检查.失败切换机制.联合使用,可以实现MySQL数据库的高可用方案. 实验环境:OS:centos 6.x x86_64系统MySQL版本: :mysql 5.6.22   64 位A: master :192.168.79.3 3306B: slave :192.168.