探索MySQL高可用架构之MHA(4)
2015-07-07 13:51
489 查看
探索MySQL高可用架构之MHA(4)-----构建mysql高可用系列(共9篇) 上一篇文章介绍了本次架构中的Mysql源码安装。本篇文章主要介绍本次架构中的ABBB复制。 首先我们先介绍什么是MySql AB复制???? AB复制又称主从复制,实现的是数据同步。如果要做MySQL AB复制,数据库版本尽量保持一致。如果版本不一致,从服务器版本高于主服务器,但是版本不一致不能做双向复制。 MySQL AB复制有什么好处呢? a.解决宕机带来的数据不一致,因为MySQL AB复制可以实时备份数据。 b.减轻数据库服务器压力,这点很容易想到,多台服务器的性能一般比单台要好。 AB复制主要通过2个线程实现: a.I/O线程:从主库上把bin-log下载到从库后,放到从库的Relay-log中。(从库中的) b.SQL线程:把Relay-log中的动作,在从库上做一次。(从库中的) AB复制的3个主要步骤 a.主服务器把数据更改记录到二进制日志中,这个操作叫做二进制日志事件。 b.从服务器把主服务器的二进制日志事件拷贝到自己的中继日志(relay log)中。 c.从服务器执行中继日志中的事件,把更改应用到自己的数据上。 修改主库和从库的参数文件(/etc/my.cnf) 主库:10.142.132.52 #[mysqld]标签下追加
server_id =1 #表示是本机的序号为1,一般来讲就是master的意思 wait_timeout=360000 #服务器在关闭它之前在一个连接上等待行动的秒数。 log-bin=binlog#开启Binlog日志 log-bin-index=binlog.index #开启Binlog日志的索引文件 log_slave_updates=1 #表示slave将复制事件写进自己的二进制日志 sync-binlog = 1 #当每进行1次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘 auto_increment_offset = 2 #表示自增长字段从那个数开始,他的取值范围是1 .. 65535 auto_increment_increment = 2 #表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535从库1:10.142.132.51(备主) #[mysqld]标签下追加
relay_log_purge=0 #是否自动清空不再需要中继日志时,0不启动 server_id =2 wait_timeout=360000 #服务器在关闭它之前在一个连接上等待行动的秒数。 log-bin=binlog #开启Binlog日志 log-bin-index=binlog.index #开启Binlog日志的索引文件 log_slave_updates=1 #表示slave将复制事件写进自己的二进制日志 sync-binlog = 1 #当每进行1次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘 auto_increment_offset = 1 #表示自增长字段从那个数开始,他的取值范围是1 .. 65535 auto_increment_increment = 2 #表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535从库2:10.142.132.48 #[mysqld]标签下追加
read_only=1 #只读操作控制 relay_log_purge=0 #是否自动清空不再需要中继日志时,0不启动 server_id = 3 relay_log = /app/mysql/mysql-relay-bin #定义relay_log的位置和名称 relay_log_index=/app/mysql/mysql-relay-bin.index #定义relay_log的索引文件位置和名称 wait_timeout=360000 #服务器在关闭它之前在一个连接上等待行动的秒数。从库3:10.142.132.47 #[mysqld]标签下追加
read_only=1 #只读操作控制 relay_log_purge=0 #是否自动清空不再需要中继日志时,0不启动 server_id = 4 relay_log = /app/mysql/mysql-relay-bin #定义relay_log的位置和名称 relay_log_index=/app/mysql/mysql-relay-bin.index #定义relay_log的索引文件位置和名称 wait_timeout=360000 #服务器在关闭它之前在一个连接上等待行动的秒数。主库 #创建用AB复制所需的用户
mysql> GRANT replication slave ON *.* TO 'lipengfei'@'%' identified by 'lipengfei'; mysql> flush privileges;所有从库 #如果从库以前有数据,要干掉原有数据,保持从库是干净的
service mysql stop #停止Mysql服务 cd /app/mysql/data #进入数据目录 rm -fr 数据库目录 #删除数据库目录 service mysql restart #启动Mysql服务主库 #主库的数据导出,并导入所有从库,保持数据一致
mysqldump -u root -pmysql m >/tmp/full.sql #主库导出数据 scp /tmp/full.sql root@从库IP:/tmp/ #主库导出的数据通过scp传送到所有从库所有从库 #导入主库传过来的数据
mysql -u root -pmysql m < /tmp/full.sql #导入主库传递过来的数据主库 #为主库加上只读锁,查看当前Binlog日志情况
mysql> flush tables with read lock; #给主库加上读锁 mysql> show master status; #查看Bin-log状态 +---------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+--------------+------------------+-------------------+ | binlog.000001 | 402 | | | | +---------------+----------+--------------+------------------+-------------------+ mysql>unlock tables; #给主库解锁所有从库 #向主库做同步操作,开启AB复制
mysql> change master to master_host='主库IP', master_port=主库端口, master_user='同步用户', master_password='同步用户的密码', master_log_file='主库Binlog',master_log_pos=主库Binlog位置; #向主库做同步操作 mysql> start slave; #启动AB复制所有从库 #查看AB复制的状态
mysql> show slave status \G Slave_IO_Running: Yes #I/O线程状态OK Slave_SQL_Running: Yes #SQL线程状态OK Seconds_Behind_Master: 0 #同步效率非常好,没有延迟主库 #模拟产生数据
mysql> create database slave; #创建数据库 mysql> use slave; #选择数据库 mysql> create table a(a int); #创建表 mysql> insert into a values(1); #插入数据 mysql> insert into a values(2); #插入数据所有从库 #查看数据同步状态
mysql> show databases; #查看当前有哪些数据库(主库新建的slave库同步过来了) mysql> use slave; #选择数据库 mysql> select * from a; #查看a表数据如果从库的同步进程停止了,主库的操作还会往从库中同步吗?会丢数据吗? 所有从库 #模拟服务出现问题
service mysql stop #停止mysql服务,模拟从库出现问题主库 #从库出现问题,此期间主库正常操作
use slave; #选择数据库 insert into a values(3); #插入数据 insert into a values(4); #插入数据所有从库 #问题解决,查看有没有丢数据
service mysql start #启动Mysql服务 mysql >use slave; #选择数据库 mysql >select * from a; #数据自动同步过来了,主库的数据没有丢失上面的结果说明了,从库中肯定保存着主库相关的配置:
/app/mysql/data/master.info到此为止,咱们的AB复制操作就结束了! 只要朋友们仔细点按着我写的文章一步一步操作,相信你也可以成功搭建AB复制的,加油吧!
相关文章推荐
- MHA 自动切换步骤及过程剖析
- SQL Server高可用的常见问题分析
- LVS+Keepalived构建高可用负载均衡(测试篇)
- 通过mysql-proxy完成mysql读写分离
- mysql 读写分离(基础篇)
- Ubuntu10下如何搭建MySQL Proxy读写分离探讨
- windows NLB+ARR实现Web负载均衡高可用/可伸缩的方法
- haproxy+keepalived实现高可用负载均衡(理论篇)
- haproxy+keepalived实现高可用负载均衡(实例配置)
- LVS+Keepalived构建高可用负载均衡配置方法(配置篇)
- 使用PHP实现Mysql读写分离
- Thinkphp实现MySQL读写分离操作示例
- Yii实现MySQL多数据库和读写分离实例分析
- keepalived之VRRP
- keepalived-2-配置文件详解
- 国内第一篇详细讲解hadoop2的automatic HA+Federation+Yarn配置的教程
- CentOS下Redis高可用安装笔记
- 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
- 搭建mysql负载均衡及高可用环境
- 使用 RMI + ZooKeeper 实现远程调用框架