主从复制配置
主库,称为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', EOF |
也可登录数据库里面执行如下语句:
CHANGE MASTER TO MASTER_HOST='192.168.1.234', |
(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 到此整个过程基本上完成了。
来源:oschina
链接:https://my.oschina.net/u/2814422/blog/730206