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主主复制汇总整理的更多相关文章

  1. mysql基础知识语法汇总整理(二)

    mysql基础知识语法汇总整理(一) insert /*insert*/ insert into 表名(字段列表) values(值列表); --蠕虫复制 (优点:快速复制数据,测试服务器压力) in ...

  2. mysql基础知识语法汇总整理(一)

    mysql基础知识语法汇总整理(二)   连接数据库操作 /*连接mysql*/ mysql -h 地址 -P 端口 -u 用户名 -p 密码 例如: mysql -u root -p **** /* ...

  3. 技术福利:mysql数据库的基本命令汇总整理

    一.创建数据库: create database database_name: php中创建数据库的两种方法:(mysql_create_db(),mysql_query()) $conn = mys ...

  4. mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离

    数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...

  5. mysql数据库主从及主主复制配置演示

    实验系统:CentOS 6.6_x86_64 实验前提:提前准备好编译环境,防火墙和selinux都关闭 实验说明:本实验共有2台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 实验拓 ...

  6. MySQL复制环境(主从/主主)部署总结性梳理

    Mysql复制概念说明Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves) ...

  7. MySQL数据的主从复制、半同步复制和主主复制详解

    一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

  8. MySQL主主复制

    MySQL5. 主主复制 环境如下: CentOS6.4_64 MySQL5. master1:192.168.10.11 master2:192.168.10.12 1.1 配置 master1 a ...

  9. MySQL主主复制3

    一.创建并授权用户 在每一台(主)服务器上创建一个用户,并为之授权,使它们可以互相访问彼此的数据库 在Server-1上: 创建一个充许Server-2来访问的用户server2,密码为:server ...

随机推荐

  1. day4列表作业详解

    1.day4题目 day4作业 1,写代码,有如下列表,按照要求实现每一个功能 li = ["alex", "WuSir", "ritian" ...

  2. CC36:平分的直线

    题目 在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分.假定正方形的上下两条边与x轴平行. 给定两个vecotrA和B,分别为两个正方形的四个顶点.请返回一个vector,代表所求 ...

  3. Codeforces 1167E(思路、数据处理)

    思路 不难想到枚举\(l\),那如何高效求出最小的\(r\)?这样答案加上\(x-r+1\)即可. 如果\(l\)并没在序列里出现--没啥想法:如果\(l\)是序列里的数,我们可以做的事情是记下每个数 ...

  4. QDU第一届程序设计大赛——E到I题解法(非官方题解)

    题目链接https://qduoj.com/contest/28/problems,密码:qdu1230 E题: 思路:先进行排序,然后去暴力模拟就可以,但可能WA了几次,导致此题没解出来,有点可惜 ...

  5. Linux (Windows Linux子系统)

    Linux (Windows Linux子系统) 如果想体验Linux环境下开发和运行.NET Core应用,我们有多种选择.一种就是在一台物理机上安装原生的Linux,我们可以根据自身的喜好选择某种 ...

  6. DevExpress PivotGrid 使用记录

    1.自定total值: 调试的时候,如果要定位,给一个index,然后,把e.CustomVale=index++;定位后,监视ds的值,每个ds的值不一样!

  7. 渣渣菜鸡的 ElasticSearch 源码解析 —— 启动流程(下)

    关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/08/12/es-code03/ 前提 上篇文章写完了 ES 流程启动的一部分,main 方法都入 ...

  8. var type = $('#<%=DropDownListRateType.ClientID %>').val();DropDownListRateType.ClientID是什么意思

    <%=DropDownListRateType.ClientID %>这个是C#绑定服务器控件在客户端ID, 比如你的DropDownListRateType你定义一个id,如果你用了模板 ...

  9. React Router 4.0中文快速入门

    import React from 'react' import { BrowserRouter as Router, Route, Link } from 'react-router-dom' co ...

  10. IO流----转换流、缓冲流

    打开一个文本文件,另存为: Ansi就是系统默认编码(就是gbk) 建一个编码是utf-8的txt文件, 例: import java.io.FileWriter; import java.io.IO ...