MySQL 的主从复制(高级篇)

首先要明白为什么要用mysql的主从复制:

1–在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)
2–在从主服务器进行备份,避免备份期间影响主服务器服务;(确保数据安全)
3–当主服务器出现问题时,可以切换到从服务器。(提升性能)

来说一下主从复制的实现原理

mysql复制过程分为三步(如上图所示):

1.mster将改变记录到二进制日志(binary log)当中 这些记录过程叫做二进制日志事件 binary log events;
2.slave将master的binary log events拷贝到它的中继日志(relay log)当中;
3.slave重做中继日志中的事件 将改变应用到自己的数据库当中 mysql复制是异步的且串行化的3.slave重做中继日志中的事件 将改变应用到自己的数据库当中 mysql复制是异步的且串行化的

复制的基本原则:

  1. 每个slave只有一个master
  2. 每个slave只能有一个唯一的服务器id
  3. 每个master可以有多个slave

复制的最大问题:
从主机复制数据达到从机可能会有延时!

都说master主机和slave从机的mysql版本号要一致 我就没一致
master主机上是5.6 slave从机上是5.7一样搞
拿过来一台服务器你不得先找mysql吗?mysql在哪里 配置文件在哪里?
执行命令:

which mysql
/usr/bin/mysql --verbose --help | grep -A 1 'Default options'

结果如图所示:
mysql的主从复制(高级篇)
先去找/etc/my.cnf再去找/etc/mysql/my.cnf 然后就是后边
我的是在/etc/my.cnf
修改my.cnf配置文件如下:
mysql的主从复制(高级篇)
重启mysql服务器执行命令:

service mysqld restart;

解释:
server-id=1 //复制组中的每台服务器都要配置唯一的Server ID,取值范围是1到(232)−1,你自己决定取值
log-bin=master-bin //日志文件名以“master-bin”作为前缀
binlog-do-db=finance_online //要同步的finance_online数据库
如要同步多个数据库,就多加几个replicate-db-db=数据库名
binlog-ignore-db=mysql //要忽略的数据库
read-only //主机 读写都可以(必须)
登录上mysql 然后执行:

show master status;

结果如下:
mysql的主从复制(高级篇)
记住里面的File和Position的值 待会会用到!

在主数据中创建一个同步账号(可不创建使用现有的),如果仅仅为了主从复制创建账号,只需要授予REPLICATION SLAVE权限
创建一个账号,账号:zcfz 密码: 123456
这个账号是专门用来搞主从复制用的哈

CREATE USER 'zcfz'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
GRANT REPLICATION SLAVE ON *.* TO 'zcfz'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

上述 主服务器配置完成

slave从服务器配置开始:
mysql的主从复制(高级篇)
重启mysql服务器:

service mysqld restart;

进入到slave从机的mysql命令行执行命令:

stop  slave;
CHANGE MASTER TO MASTER_HOST='10.10.20.120',
MASTER_USER='zcfz',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-bin.000005',
MASTER_LOG_POS=3878614;

解释:
MASTER_HOST 就是master主服务器的ip
MASTER_USER 就是master主服务器里面的专门复制复制的用户 zcfz
MASTER_PASSWORD 就是zcfz账户的密码
MASTER_LOG_FILE 就是我们上边让您保存的file对应的值
MASTER_LOG_POS 就是我们上边让您保存的Position的值
然后执行命令:

show slave status\G

结果如图所示:
mysql的主从复制(高级篇)
wating for master to send evnet 说明已经在待命状态了
另外必须注意的是 slave_io_runing 以及 slave_sql_runing 都同时必须为yes才行!!!
截止到此刻说明主从复制的道路打通了!
然后执行命令:

start slave;

验证阶段:
执行命令创建数据库:

CREATE DATABASE finance_online DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

这个时候master 和 slave 上都有了数据库
然后你再导入数据到master主机上的finance_online 那么 slave从机上也就有了然后你再导入数据到master主机上的finance_online 那么 slave从机上也就有了

另外如果你不想复制这个库了 想换一个
那么去修改master主机上的my.cnf当中的binlog-do-db=tprbac 然后重启mysql服务
然后show master status 看看file 和positon
然后再去linux服务器上停止slave 在mysql当中执行 stop slave;
然后再执行:
CHANGE MASTER TO MASTER_HOST=’10.10.20.120’,
MASTER_USER=’zcfz’,
MASTER_PASSWORD=’123456’,
MASTER_LOG_FILE=‘你看到的file’,
MASTER_LOG_POS=你看到的positon;
然后在start slave;
就完事了!
这样就会主从复制你想要复制的数据库了!!!

本作品采用《CC 协议》,转载必须注明作者和本文链接
胡军
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!