设为首页 收藏本站
查看: 612|回复: 0

[经验分享] 探索MySQL高可用架构之MHA(4)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-8 08:40:58 | 显示全部楼层 |阅读模式
上一篇文章介绍了本次架构中的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]标签下追加
1
2
3
4
5
6
7
8
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]标签下追加
1
2
3
4
5
6
7
8
9
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]标签下追加
1
2
3
4
5
6
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]标签下追加
1
2
3
4
5
6
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复制所需的用户
1
2
mysql> GRANT replication slave ON *.* TO 'lipengfei'@'%' identified by 'lipengfei';
mysql> flush privileges;



        所有从库    #如果从库以前有数据,要干掉原有数据,保持从库是干净的
1
2
3
4
service mysql stop  #停止Mysql服务
cd /app/mysql/data  #进入数据目录
rm -fr 数据库目录   #删除数据库目录
service mysql restart  #启动Mysql服务



        主库    #主库的数据导出,并导入所有从库,保持数据一致
1
2
mysqldump -u root -pmysql m >/tmp/full.sql  #主库导出数据
scp /tmp/full.sql root@从库IP:/tmp/    #主库导出的数据通过scp传送到所有从库



        所有从库    #导入主库传过来的数据
1
mysql -u root -pmysql m < /tmp/full.sql  #导入主库传递过来的数据



        主库    #为主库加上只读锁,查看当前Binlog日志情况
1
2
3
4
5
6
7
8
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复制
1
2
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复制的状态
1
2
3
4
mysql> show slave status \G
Slave_IO_Running: Yes  #I/O线程状态OK
Slave_SQL_Running: Yes  #SQL线程状态OK
Seconds_Behind_Master: 0  #同步效率非常好,没有延迟



        主库   #模拟产生数据
1
2
3
4
5
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);  #插入数据



        所有从库    #查看数据同步状态
1
2
3
mysql> show databases;  #查看当前有哪些数据库(主库新建的slave库同步过来了)
mysql> use slave;   #选择数据库
mysql> select * from a;  #查看a表数据



    如果从库的同步进程停止了,主库的操作还会往从库中同步吗?会丢数据吗?
        所有从库    #模拟服务出现问题
1
service mysql stop   #停止mysql服务,模拟从库出现问题



        主库    #从库出现问题,此期间主库正常操作
1
2
3
use slave;    #选择数据库
insert into a values(3);    #插入数据
insert into a values(4);    #插入数据



        所有从库  #问题解决,查看有没有丢数据
1
2
3
service mysql start   #启动Mysql服务
mysql >use slave;   #选择数据库
mysql >select * from a;  #数据自动同步过来了,主库的数据没有丢失



    上面的结果说明了,从库中肯定保存着主库相关的配置:
1
/app/mysql/data/master.info



    到此为止,咱们的AB复制操作就结束了!
    只要朋友们仔细点按着我写的文章一步一步操作,相信你也可以成功搭建AB复制的,加油吧!



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84325-1-1.html 上篇帖子: centos6.5下源码安装mysql密码修改 下篇帖子: mysql 主从复制配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表