您的位置:首页 > 数据库 > MySQL

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

2016-08-09 00:00 537 查看
主从复制配置

主库,称为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 到此整个过程基本上完成了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息