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. BZOJ 4236: JOIOJI map瞎搞

    分别记录J,O,I,的个数 cnt[char][i] 表示处理到第i位,char的个数 显然当且仅当 cnt[J][i] - cnt[O][i] == cnt[J][j-1] - cnt[O][j-1 ...

  2. HDU1409 Is It a Number

    http://acm.hdu.edu.cn/showproblem.php?pid=1409 没啥好说的,至今也不知道到底错在哪里了,看了discuss才过的 #include <iostrea ...

  3. Java EE学习笔记(十)

    MyBatis与Spring的整合 1.整合环境搭建 1).要实现MyBatis与Spring的整合,很明显需要这两个框架的JAR包,但是只使用这两个框架中所提供的JAR包是不够的,还需要其他的JAR ...

  4. 四则运算二(java web)

    最近我和我的小伙伴yaoyali结成对子,共同写网页版的四则运算.虽然现在还没弄好,但是比起上次用纯java写的四则运算有了很大改进. 一.存放四则运算题目和答案的类 package com.jaov ...

  5. linux网卡软中断shell脚本

    LANG=C;export LANG;  service irqbalance stop >/dev/null 2>&1;chkconfig irqbalance off; bon ...

  6. CQRS之旅——旅程4(扩展和增强订单和注册限界上下文)

    旅程4:扩展和增强订单和注册限界上下文 进一步探索订单和注册的有界上下文. "我明白,如果一个人想看些新鲜的东西,旅行并不是没有意义的."儒勒·凡尔纳,环游世界80天 对限界上下文 ...

  7. idea报错:Error running $classname: Command line is too long. Shorten command line for $classname.

    Command line is too long 打印的变量太长了,超过了限制,这都会报错...我只想知道idea基于什么原理会报这个错... 解决 1.按照提示修改该类的配置,选择jar manif ...

  8. 给Visual Studio更换皮肤和背景图

    1.先安装更换皮肤的插件 VS菜单栏里面找到:工具>扩展和更新>联机>搜索: Theme Editor 下载并安装: 安装后先不着急重启VS 然后,安装可更改背景图片的插件:工具&g ...

  9. Hibernate 事物隔离级别

      Hibernate事务和并发控制                                            ++YONG原创,转载请注明 1.    事务介绍: 1.1.        ...

  10. EasyUI:EasyUI-DataGrid多行合并实现

    1.首先我们<table>增加一个属性data-options="onLoadSuccess:mergeCells",mergeCells是我们对应的JS方法名,意思就 ...