MySQL多实例,主从同步(3)—— 主从复制配置

江枫思渺然 提交于 2019-11-27 04:08:10

主从复制配置

 

 主库,称为Master 从库称为Slave。

 

1. 主库上执行操作

 

(1) 设置server-id 值并开启binlog设置

  根据前文MySQL的同步原理,我们知道复制的关键因素就是binlog日志。

执行 vi /data/3306/my.cnf 编辑my.cnf配置文件,按如下两个参数内容修改:

[mysqld]
server-id =1
log-bin=/data/3306/mysql-bin

检查配置后的结果

grep -E "server-id|log-bin" /data/3306/my.cnf
log-bin=/data/3306/mysql-bin  
server-id=1

 

(2) 建立用于同步的账号rep

 

mysql -uroot -p'' -S /data/3306/mysql.sock
grant replication slave on *.* to 'rep'@'10.0.0.%' identified by 'password';

 

(3) 锁表只读(当前窗口不要关闭)

生产环境时,操作主从复制,需要申请停机事件,锁表会影响业务。

flush tables with read lock;
interactive_timeout=60
wait_timeout=60

 

(4) 查看主库状态

 

查看主库状态,即当前日志文件名和二进制偏移量

show master status 命令显示的信息要记录在案,后面的从库复制时是从这个位置开始同步。

 

(5)导出数据库数据

 

单开新窗口,导出数据库数据,如果数据量比较大,可以停库直接打包数据文件迁移。

mkdir /server/backup/ -p
mysqldump -uroot -p'password' -S /data/3306/mysql.sock -A -B |gzip >/server/backup/mysql_bak.${date +%F}.sql.gz
ls -l /server/backup/mysql_bak.${date +%F}.sql.gz

 

导为了确保导库期间,数据库没有数据插入,可以再检查下主库状态信息

mysql -u root -p'password' -S /data/3306/mysql.sock -e "show master status"

 

导库后,解锁主库,恢复可写:

unlock tables;

 

(6) 把主库备份的MySQL数据迁移到从库

 

这不常用命令有scp,rsync等,相关命令前面的课程已详细讲解过了,这里就不多描述了。

本文讲解的是单数据库多实例主从配置,因此,数据在一台机器上,查看下数据

 

2 从库执行操作

 

(1) 设置server-id 值并关闭binlog设置

 

数据库的server-id一般在LAN内是唯一的,这里的server-id要和主库及其他从库不同,并解析掉从库的binlog参数配置执行vi /data/3307/my.cnf配置文件,按如下两个参数内容修改:

[mysqld]
server-id=2
#log-bin=/data/3307/mysql-bin

 

(2) 还原主库导出的数据备份

gzip -d mysql_bak.2014-04-17.sql.gz
mysql -uroot -p'password' -S /data/3307/mysql.sock < mysql_bak.2014-04-17.sql

 

(3) 登录从库配置同步参数

mysql -uroot -p'password' -S /data/3307/mysql.sock
CHANGE MASTER TO
MASTER_HOST='10.0.0.x', <==这里是主库的IP
MASTER_PORT=3306,  <==这里是主库的端口,从库端口可以和主库不同。
MASTER_USER='rep',<==这里是主库上建立的用于复制的用户rep
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.0000008',<==这里是show master status时看到的查到二进制文件名称
MASTER_POS=342;<==这里是show master status时看到的查看二进制日志偏移量,注意不能多空格。

 

不登陆数据库,在命令行快速执行CHANGE MASTER的语句(适合在脚本中批量建Slave库用)

本文即用此法来操作

cat |mysql -uroot -p'password' -S /data/3307/mysql.sock<< EOF

CHANGE MASTER TO

MASTER_HOST='10.0.0.x',
MASTER_PORT=3306, 
MASTER_USER='rep',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.0000008',
MASTER_LOG_POS=342;

EOF

 

也可登录数据库里面执行如下语句:

 

CHANGE MASTER TO

MASTER_HOST='192.168.1.234',
MASTER_PORT=3306, 
MASTER_USER='rep',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000010',
MASTER_LOG_POS=261;

 

(4) 启动从库同步开关

启动从库同步开关,并查看同步状态

 

mysql -uroot -p'password' -S /data/3307/mysql.sock -e "start slave;"
mysql -uroot -p'password' -S /data/3307/mysql.sock -e "show slave status\G;"

 

判断复制是否搭建成功就看如下IO和SQL两个线程是否显示为Yes状态

Slave_IO_Running:Yes  负责从库去主库读取Binlog日志,并写入从库的中继日志中

Slave_SQL_Runnint:Yes  负责读取并中继日志中Binlog,转换SQL语句后应用到数据库汇总

 

Ok 到此整个过程基本上完成了。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!