前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何实现CDH元数据库MySQL的主主互备

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

作者头像
Fayson
修改2018-04-01 20:55:56
2.6K0
修改2018-04-01 20:55:56
举报
文章被收录于专栏:Hadoop实操Hadoop实操

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 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同步账号

代码语言:txt
复制
GRANT REPLICATION SLAVE ON *.* TO 'mysqla'@'172.31.%' IDENTIFIED BY 'mysqla';

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

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

代码语言:txt
复制
[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

代码语言:txt
复制
[root@ip-172-31-6-148 ~]# service mysqld restart

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

代码语言:txt
复制
[root@ip-172-31-6-148 ~]# mysqldump -uroot -p --events  --all-databases > all.dump

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

将数据拷贝至MySQLB服务上

代码语言:txt
复制
[root@ip-172-31-6-148 ~]# scp all.dump ip-172-31-5-190.fayson.com:/root/

4.MySQLB配置


1.创建MySQL同步账号

代码语言:txt
复制
GRANT REPLICATION SLAVE ON *.* TO 'mysqlb'@'172.31.%' IDENTIFIED BY 'mysqlb';

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

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

代码语言:txt
复制
[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

代码语言:txt
复制
[root@ip-172-31-5-190 /]# service mysqld restart

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

代码语言:txt
复制
[root@ip-172-31-5-190 ~]# mysql -uroot -p <all.dump 

确认数据是否导入成功

5.配置MySQLA->MySQLB同步


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

代码语言:txt
复制
[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,执行如下同步命令

代码语言:txt
复制
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库中执行启动同步命令

代码语言:txt
复制
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql>

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

代码语言:txt
复制
mysql> show slave status \G

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

6.配置MySQLB->MySQLA同步


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

代码语言:txt
复制
[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数据库执行如下同步命令

代码语言:txt
复制
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库中执行启动同步命令

代码语言:txt
复制
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实操

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档