MySQL主从配置

一、MySQL主从介绍

MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的

MySQL主从是基于binlog的,主上须开启binlog才能进行主从。

主从过程大致有3个步骤

1)主将更改操作记录到binlog里

2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里

3)从根据relaylog里面的sql语句按顺序执行

主上有一个log dump线程,用来和从的I/O线程传递binlog

从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地

 

二、MySQL主从原理图

c074c05952daa660b56668eaa4f3e3c5468.jpg

 

 

 

 

三、准备工作

主:192.168.0.236

从:192.168.0.182

2台机器都要安装mysql服务,安装过程参照LANP中mysql搭建过程

 

主操作:

ps aux |grep mysql               //查看服务是否启动

6e9af0ba748b8c76d2e000d877398bd28e5.jpg

 

vim /etc/my.cnf          //修改配置文件,增加server-id=1和log_bin=master

1b7fbec5ce5a5b60ae2c6c59885b71c0422.jpg

 

 

/etc/init.d/mysqld restart                   //重启服务

 

cd /data/mysql/          //进入mysql数据目录

54c700ce908fafbb510e66c617c998207b2.jpg

 

 

 

mysqldump -uroot -pabc123 zrlog > /tmp/zrlog.sql            //备份zrlog

 

mysql -uroot -pabc123 -e "create database test2"              //创建test2库

 

mysql -uroot -pabc123 test2 < /tmp/zrlog.sql                  //恢复数据库

 

mysql -uroot -pabc123                         //进入数据库

mysql> grant replication slave on *.* to 'repl'@192.168.0.182 identified by 'abc-123';          //创建用户

 

mysql> flush tables with read lock;                   //锁表,目的是为了让数据不再继续写入表里

 

mysql> show master status;                            

9b4ab64bc4441a75461e02dc8f65c394dab.jpg

 

 

 

 

备份所有的数据库

cd /data/mysql/          //进入mysql数据目录

a021b8ec940245fca453a74574bc5c6a5d6.jpg

 

 

mysqldump -uroot -pabc123 mysql2 > /tmp/mysql2.sql                //备份mysql2库

 

mysqldump -uroot -pabc123 test2 > /tmp/test2.sql                     //备份test2库

 

 

ls /tmp/*sql               //查看备份的数据库

7eb76c7afe4ce89330cc72b264b5223c2db.jpg

 

 

 

 

从操作:

ps aux |grep mysql               //查看服务是否启动

e111cb709aa70fc199daaa80be73838620d.jpg

 

 

查看my.cnf,配置server-id=2,要求和主不一样

vim /etc/my.cnf           //编辑配置文件

07073dba9695b231c55c0c3f1ef6158fcb3.jpg

 

 

/etc/init.d/mysqld restart              //重启服务

 

scp 192.168.0.236:/tmp/*.sql /tmp/              //将主备份的数据库复制到从上面

924ce309ba24c0d066d97b2800ee2886b54.jpg

 

 

首次运行mysql命令是不存在的

0524335dfaa4d9c3b9e76676fcd34746204.jpg

 

alias 'mysql=/usr/local/mysql/bin/mysql'             //设置mysql别名

alias 'mysqldump=/usr/local/mysql/bin/mysqldump'            //设置mysqldump别名

84ca0771f7ece30ce2c181ba1d8335d302e.jpg

 

mysqladmin -uroot password 'abc123'      //给数据库设置密码

 

mysql -uroot -p             //登录mysql

3a0772a6099db1bf3beaa6b31de95fe65ce.jpg

 

 

mysql> create database zrlog;                 //创建zrlog库

41a23bf21d66bf7d8840283b2dcebbd6dd1.jpg

mysql> create database mysql2;                           //创建mysql2库

a1be6fb3fb6986f2dd9d4c66123efc9352c.jpg

mysql> create database test2;                    //创建test2库

f49c038815ec52f19cdf8c99df926462678.jpg

 

mysql -uroot -pabc123 zrlog < /tmp/zrlog.sql               //还原zrlog数据库

mysql -uroot -pabc123 mysql2 < /tmp/mysql2.sql           //还原mysql2数据库

8e07794347a51883a74efe05db797f69fd5.jpg

 

mysql -uroot -pabc123 test2 < /tmp/test2.sql                 //还原test2数据库   

cc524063a8de75f7a976d2084fa3e12e786.jpg

 

 

mysql -uroot -pabc123          //进入数据库

 

mysql> stop slave;                   //停止从

14c783767a4751bb9b7fd31a3c9667305ed.jpg

 

mysql> change master to master_host='192.168.0.236', master_user='repl', master_password='abc-123', master_log_file='master.000001', master_log_pos=10698;

f4cd43228bd54d6e20277d3728c487f6e81.jpg

 

mysql> start slave;                      //启动从

327414331fb265b8d2bf5bb1ac131c402ea.jpg

 

mysql> show slave status\G                        //检查主从是否配置成功

16c17a27f8b980b6a4da272a61deb4cc052.jpg

9cf12f4b1109a1b451d41f066d85691631e.jpg

 

 

此时还要到主上执行 unlock tables;

mysql -uroot -pabc123              //进入数据库

mysql> unlock tables;                //恢复写操作

 

 

 

四、测试主从

 

几个配置参数

主服务器上

binlog-do-db=      //仅同步指定的库,多个数据库分行写

binlog-ignore-db= //忽略指定库

从服务器上

replicate_do_db=

replicate_ignore_db=

replicate_do_table=                 //不建议使用

replicate_ignore_table=           //不建议使用

replicate_wild_do_table=   //如test2.%, 支持通配符%

replicate_wild_ignore_table=

 

 

主服务器上操作

mysql -uroot -pabc123             //进入数据库

 

mysql> use test2;                     //进入test2库

mysql> show tables;                      //查看test2的所有表

e9a9d0aea2f1fffa4466143ef0b3139bffe.jpg

 

mysql> select count(*) website;              //查看表行数

d278aa0b564687c0a22e06129a286fbeeb1.jpg

 

 

 

 

 

 

 

从服务器上操作

 

mysql -uroot -pabc123             //进入数据库

 

mysql> use test2;                     //进入test2库

mysql> show tables;                      //查看test2的所有表

630942937a2644e9b4e61c3126da463f3ec.jpg

 

mysql> select count(*) website;               //查看表行数,和主服务器一致

8c1debd65d9c96ace24111907293abe5158.jpg

 

 

 

 

测试一

主服务器

mysql> truncate table website;              //删除表数据

52f6bfc0ba65bf1c7767c0d7b211d28d6f5.jpg

mysql> select * from website;             //查询表数据

8a21b71310673c5a122c1b7ab90c1b39e6f.jpg

 

 

 

从服务器

mysql> select count(*) from  website;              //查询表数据,显示一致

882007bc051bf1642ee27c8d315ca1a563c.jpg

mysql> select * from  website;              //无数据

78c569890a914b10e06a5014c4c63b7b627.jpg

 

 

测试二

主服务器

mysql> drop table website;                //删除表

a459889bc06a9e744e08543d3aae0816baf.jpg

 

 

从服务器

select * from  website;       //查询表,显示不存在

b07d5e5bf62f5d93ec77a396b0fbbd1539b.jpg

 

 

总结:删除或更改数据库和表,不允许在从服务器上操作,会导致数据不同步,主从失效,如果不慎操作

此时应该重新做主从:

主服务器操作

mysql> show master status;          //记录Position的ID号

c5b3211e14fcefef4583dbd9ec755a5088f.jpg

 

 

 

从服务器操作

mysql> stop slave;                   //停止从

705a9724d0be60dd7be8992fa63aac354c7.jpg

 

mysql> change master to master_host='192.168.0.236', master_user='repl', master_password='abc-123', master_log_filelog_file='master.000001', master_log_pos=10918;               //数据还是一致的情况下,重新执行主从命令,否则只能重新备份数据库

 

 

mysql> start slave;                      //启动从

8afc310c9bc65860f13bbaf3dfcb2c61604.jpg

 

 

 

mysql> show slave status\G                        //检查主从是否配置成功

 

 

 

转载于:https://my.oschina.net/u/3991860/blog/2994623

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值