mysql主主复制汇总整理
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 #要同步的数据库,默认所有库,指定多个库添加新行就可以
replicate-do-db=phpcmsv9 #不要同步的数据库,指定多个库添加新行就可以
replicate-ignore-db=mysql
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;
mysql主主复制汇总整理的更多相关文章
- mysql基础知识语法汇总整理(二)
mysql基础知识语法汇总整理(一) insert /*insert*/ insert into 表名(字段列表) values(值列表); --蠕虫复制 (优点:快速复制数据,测试服务器压力) in ...
- mysql基础知识语法汇总整理(一)
mysql基础知识语法汇总整理(二) 连接数据库操作 /*连接mysql*/ mysql -h 地址 -P 端口 -u 用户名 -p 密码 例如: mysql -u root -p **** /* ...
- 技术福利:mysql数据库的基本命令汇总整理
一.创建数据库: create database database_name: php中创建数据库的两种方法:(mysql_create_db(),mysql_query()) $conn = mys ...
- mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离
数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...
- mysql数据库主从及主主复制配置演示
实验系统:CentOS 6.6_x86_64 实验前提:提前准备好编译环境,防火墙和selinux都关闭 实验说明:本实验共有2台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 实验拓 ...
- MySQL复制环境(主从/主主)部署总结性梳理
Mysql复制概念说明Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves) ...
- MySQL数据的主从复制、半同步复制和主主复制详解
一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...
- MySQL主主复制
MySQL5. 主主复制 环境如下: CentOS6.4_64 MySQL5. master1:192.168.10.11 master2:192.168.10.12 1.1 配置 master1 a ...
- MySQL主主复制3
一.创建并授权用户 在每一台(主)服务器上创建一个用户,并为之授权,使它们可以互相访问彼此的数据库 在Server-1上: 创建一个充许Server-2来访问的用户server2,密码为:server ...
随机推荐
- Codeforces Round #566 (Div. 2)
Codeforces Round #566 (Div. 2) A Filling Shapes 给定一个 \(3\times n\) 的网格,问使用 这样的占三个格子图形填充满整个网格的方案数 如果 ...
- HDU-1845-Jimmy's Assignment
链接:https://vjudge.net/problem/HDU-1845 题意: 给一个有向图,求最大匹配. 思路: 有相图的最大匹配,可以通过加上反向边, 求这个无向图的最大匹配, 原图的最大匹 ...
- Spring boot中应用jpa jpa用法
https://blog.csdn.net/u012582402/article/details/78717705
- NET Core应用中如何记录和查看日志
NET Core应用中如何记录和查看日志 日志记录不仅对于我们开发的应用,还是对于ASP.NET Core框架功能都是一项非常重要的功能特性.我们知道ASP.NET Core使用的是一个极具扩展性的日 ...
- Sticky Footer的实现
Sticky Footer即绝对底部,是一种常用的布局方式,页脚在内容区未超出窗口高度时一直保持在最底部显示,而超过窗口高度时则保持在内容区最底部. 有两种实现方法: 第一种:经典的实现方式 html ...
- Linux Ubuntu系统之PPP拨号经验分享
近期,工作需要,我负责开发PPP拨号模块. 说起拨号,算算时间,我已经做过2次了, 暴露年龄了,呵呵. 第一次是刚毕业做的PPOE拨号,给电信做拨号软件,在河北石家庄工作过一段时间,基于windows ...
- Java输入输出流简单案例
package com.jckb; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io. ...
- 合并石子,区间dp
#define INF 9999999 ],dp[][],ans=,s[]; int main() { scanf("%d",&n); ;i<=n;i++) scan ...
- 【持续更新】Spring相关
什么是IoC 什么是AoP Bean的实例化方法--3种 Bean的作用域--常用2种 Bean的生命周期 Bean的装配方式 基于xml的2种装配方式 基于Annotaton的装配方式
- 使用javaMail发送简单邮件
参考网页:http://blog.csdn.net/xietansheng/article/details/51673073package com.bfd.ftp.utils; import java ...