如何实现CDH元数据库MySQL的主主互备

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢

1.文档编写目的


在前面Fayson讲过《如何实现CDH元数据库MySQL的主备》,而本篇文章介绍如何实现MySQL的双活方式,为后面基于Keepalived实现MySQL高可用做铺垫。

  • 内容概括

1.MySQLA和MySQLB配置

2.构建主主同步

3.主主互备验证

  • 测试环境

1.两台Linux服务器(172.31.6.148/172.31.5.190),操作系统为CentOS6.5

2.MySQL5.1.73

3.采用root用户操作

  • 前置条件

1.两个MySQL版本必须一致

2.两个MySQL已安装

2.测试环境说明


IP地址

状态

别名

172.31.6.148

已安装,且有生产数据

MySQLA

172.31.5.190

新装无任何数据

MySQLB

以上是Fayson的CDH集群元数据的使用情况,这里我们需要停止所有对MySQLA的读写操作,然后配置后两个集群的主主同步,这里数据库别名是为了后面在讲述的时候区别。

3.MySQLA配置


1.创建MySQL同步账号

GRANT REPLICATION SLAVE ON *.* TO 'mysqla'@'172.31.%' IDENTIFIED BY 'mysqla';

该同步账号主要是给MySQLB使用。

2.开启MySQLA的binlog,在/etc/my.conf中增加如下配置

[root@ip-172-31-6-148 ~]# vim /etc/my.cnf 
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

server-id=148
log-bin=mysql-bin
binlog_format=MIXED

read-only=0
auto-increment-increment=10
auto-increment-offset=1

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

黄底部分前三行Fayson之前的文章已描述过,后面三个参数说明:

read-only:标识数据库是否为只读,这里我们设置为0即非只读,该参数针对用户没有SUPER权限设置。

auto-increment-increment和auto-increment-offset这两个参数主要控制MySQL自增列的值,用于Master-Master之间的复制,防止出现重复值。做了如上配置后,我们向该MySQLA服务中插入第一个id就是1,第二行的id就是11,而不是2,那么在MySQLB服务插入第一个id就是2,第二行的id就是12,这样就不会出现主键冲突。

3.保存配置,并重启MySQL

[root@ip-172-31-6-148 ~]# service mysqld restart

4.导出MySQLA数据库的全部数据

[root@ip-172-31-6-148 ~]# mysqldump -uroot -p --events  --all-databases > all.dump

由于Fayson的MySQLA数据库中已经有数据了,所以需要将库中的数据导出,将导出的数据导入到MySQLB中,如果MySQLA为新装数据库则可以跳过此步。

将数据拷贝至MySQLB服务上

[root@ip-172-31-6-148 ~]# scp all.dump ip-172-31-5-190.fayson.com:/root/

4.MySQLB配置


1.创建MySQL同步账号

GRANT REPLICATION SLAVE ON *.* TO 'mysqlb'@'172.31.%' IDENTIFIED BY 'mysqlb';

该同步账号主要是给MySQLA使用。

2.修改/etc/my.conf配置,内容如下

[root@ip-172-31-5-190 /]# vim /etc/my.cnf
read-only=0
auto-in
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

server-id=190
log-bin=mysql-bin
binlog_format=MIXED

relay_log=mysql-relay-bin
log-slave-updates=ON

read-only=0
auto-increment-increment=10
auto-increment-offset=2

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

3.保存配置,然后重新MySQLB

[root@ip-172-31-5-190 /]# service mysqld restart

4.导入MySQLA库数据,如果无数据则跳过此步

[root@ip-172-31-5-190 ~]# mysql -uroot -p <all.dump 

确认数据是否导入成功

5.配置MySQLA->MySQLB同步


1.登录MySQLA查看master状态,提示:代码块部分可以左右滑动查看噢

[root@ip-172-31-6-148 ~]# mysql -uroot -p
Enter password: 
...
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000042 |     8536 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> 

2.登录MySQLB,执行如下同步命令

change master to
master_host='172.31.6.148',
master_user='mysqla',
master_password='mysqla',
master_log_file='mysql-bin.000042',
master_log_pos=8536;

3.在MySQLB库中执行启动同步命令

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql>

4.在MySQLB中执行如下命令,查看是否配置成功

mysql> show slave status \G

如上图标注则表示配置成功。

6.配置MySQLB->MySQLA同步


1.登录MySQLB查看master状态,提示:代码块部分可以左右滑动查看噢

[root@ip-172-31-5-190 ~]# mysql -uroot -p
Enter password: 
...
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 | 76841237 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> 

2.登录MySQLA数据库执行如下同步命令

change master to
master_host='172.31.5.190',
master_user='mysqlb',
master_password='mysqlb',
master_log_file='mysql-bin.000005',
master_log_pos=76841237;

3.在MySQLA库中执行启动同步命令

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql>

4.登录MySQLA验证同步命令是否执行成功

有上图标注则表示启动成功。

7.主主互备验证


1.登录MySQLA数据库创建test库

2.登录MySQLB数据库查看是否有test库

在MySQLB数据库中可以看到在MySQLA上创建的test库。

3.在MySQLB数据库中将test库删除

4.登录MySQLA数据库,查看test库是否存在

可以看到MySQLA数据库中已不存在test库。

  • MySQL配置参数说明

参考文档:http://blog.csdn.net/wlzx120/article/details/52301383

为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操

原文发布于微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文发表时间:2018-01-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

Oracle Data Guard 重要配置参数

    Oracle Data Guard主要是通过为生产数据库提供一个或多个备用数据库(是产生数据库的一个副本),以保证在主库不可用或异常时数据不丢失并通过备...

1342
来自专栏乐沙弥的世界

RMAN 备份详解

RMAN使用服务器会话来完成备份操作,从RMAN客户端连接到服务器将产生一个服务器会话

1542
来自专栏Java编程技术

使用MySQL Server Side Cursor解决查询数据量过大造成OOM

前面介绍了MyBaits中两种使用游标的方式来避免搜查内容过大导致OOM,这两种方式被称为是客户端side的游标,因为mysql client每次从自己的接受b...

1301
来自专栏个人分享

spark MapOutputTrackerMaster

最近用了一个RowNumber() over()函数 进行三张4000万数据的关联筛选,建表语句如下:

1242
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Alerta监视Zabbix警报

Alerta是一个Web应用程序,用于合并和删除来自多个监视系统的警报,并在界面上显示它们。Alerta可以与许多的监控工具集成,如Nagios,Zabbix,...

2264
来自专栏北京马哥教育

NFS实现(双httpd + php-fpm + nfs + mysql 搭建discuz论坛)

NFS相关介绍 一、NFS简介 1. NFS(Network File System): NFS是一个文件共享协议, 也是是在类Unix系统中在内核中实现的文件...

3577
来自专栏跟着阿笨一起玩NET

Log4Net日志记录两种方式

     log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库...

3012
来自专栏blackpiglet

DNSMasq 域名解析配置

DNSMasq 主要用来解决内网 DNS 域名缓存、DHCP、网络启动和路由通告功能,本文主要是将 DNSMasq 作为内网 DNS 使用。安装环境为 Ubun...

3414
来自专栏hotqin888的专栏

beego利用casbin进行权限管理——第三节 策略查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

2532
来自专栏菩提树下的杨过

hadoop: hive 1.2.0 在mac机上的安装与配置

环境:mac OS X Yosemite + hadoop 2.6.0 + hive 1.2.0 + jdk 1.7.0_79 前提:hadoop必须先安装,且...

2978

扫码关注云+社区

领取腾讯云代金券