如何实现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实操
- [WCF REST] 通过ASP.NET Output Caching实现声明式缓存
- [WCF REST] 通过ASP.NET Output Caching实现声明式缓存
- CentOS6.5下安装JDK
- 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
- 开源API测试工具 Hitchhiker v0.8 - 自动化测试结果统计
- 腾讯AI-JavaAPI示例代码
- C++ 模板学习
- 小程序游戏上线!独家微信官方及专业核心解读!
- 零基础小白成为大数据技术专家必知的学习历程
- Wandelbots重新定义对机器人进行编程的方式
- 结构体字节对齐
- 中国IDC圈、科智咨询王若冰:从供到需——IDC产业的演进之路
- 本周网络空间态势摘要
- C++重要知识点小结---1
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
- PHP命名空间简单用法示例
- PHP array_shift()用法实例分析
- PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
- 基于Python+QT的gui程序开发实现
- 使用tensorflow根据输入更改tensor shape
- 使用keras实现非线性回归(两种加激活函数的方式)
- Django Form设置文本框为readonly操作
- 浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
- keras和tensorflow使用fit_generator 批次训练操作
- php-fpm中max_children的配置
- python文件读取失败怎么处理
- PHP-FPM的配置与优化讲解
- python为什么会环境变量设置不成功
- keras自动编码器实现系列之卷积自动编码器操作