如何实现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实操
- 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 实例讲解
- django-Views之request(二)
- django-Views之常见的几种错误视图代码(三)
- django-Views之装饰器(四)
- django-Views之使用视图渲染模板(五)
- springmvc实例之显示雇员相关信息(一)
- django-Views之类视图 (六)
- springmvc之重定向
- django-模板之自定义模板路径(一)
- spring配置Bean之基于xml文件的方式
- django-模板之模板变量(二)
- 【猫狗数据集】计算数据集的平均值和方差
- django-模板之extends(三)
- django-模板之block(四)
- spring之添加后置处理器的bean的生命周期
- django-模板之URL标签(五)