设备:两台虚拟机 master 192.168.2.103 slave 192.168.2.104
环境:centos6.3 lnmp集成环境 mysql版本5.5.37
在学习mysql主从同步之前,我们首先得了解mysql授权、mysql的bin-log日志、mysqldump
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
//授权 //通过以下sql可以查询当前mysql的所有用户权限 select user,host,password from mysql.user //在master上为slave开一个账号 //grant表示授权 replication slave表示主从复制权限 on表示关于 *.*表示所有数据库的所有表(数据库.表) //to表示给 user2表示用户名 @192.168.2.104表示允许这个地址的主机登陆 //identified by '123'表示设置密码为123 grant replication slave on *.* to user2@192.168.2.104 identified by '123'; //在slave上登录master,如果登录成功,表示授权成功 mysql -u user2 -h 192.168.2.103 -p 123 //如果不了解如何授权,可使用 ? grant; 查看帮助 //mysql bin-log日志 //开启bin-log日志 vim /etc/my.cnf 设置 log-bin=mysql-bin //可通过show variables like '%bin%';查看开启情况 //二进制日志 保存 增删改的日志,通常存放在/usr/local/mysql/var目录下,实际位置查看my.cnf //刷新bin-log日志 此时就会多一个最新的bin-log日志 flush logs; //查看最后一个bin日志 show master status; //清空所有的bin-log日志 reset master; //查看bin-log日志 bin-log日志是二进制的 需要通过mysqlbinlog来查看 //utf8字符集查看的时候好像有个bug需要加上 --no-defaults //mysql-bin.00001 mysql-bin.index 是mysql原始保留的二进制日志,不要随意删除 /usr/local/bin/mysqlbinlog --no-defaults mysql-bin.000001 //恢复指定mysql-bin.000002到指定的数据库 --start-position --stop-position可以根据pos点指定恢复区间 //也可以使用时间点来恢复 --start-date='xxxxx' --stop-date="xxxx" 例如:2015-05-01 12:12:12 mysqlbinlog --no-defaults --start-position="107" --stop-position="280" mysql-bin.000002 | mysql -u用户名 -p密码 数据库名 //mysqldump备份 -l表示读锁 -F表示重新生成bin-log日志 mysqldump -uroot -p密码 数据库 -l -F > /dir/xxx.sql //恢复备份数据 -f表示遇到错误继续执行 mysql -uroot -p密码 数据库 -f < /dir/xxx.sql |
了解以上知识后,就可以配置mysql主从了,步骤如下:
注:为了保证测试的顺利,可以在配置前先清理一下bin-log日志 reset master
master服务器配置
1.授权一个账号给从服务器使用
2./etc/my.cnf中开启bin-log日志并设置一个唯一的server-id(需要跟从服务器不同)
3.使用mysqldump备份数据 建议加上 -l读锁 -F重新生成bin-log日志
4.把master的数据备份传输到slave上 scp /tmp/test.sql 192.168.2.104:/tmp/
5.重启mysql
slave服务器配置
1.恢复传输过来的备份数据
2./etc/my.cnf 开启bin-log 设置唯一的server-id 开启master-host=192.168.2.103 master-user = user2 master-
password=123 master-port=3306
3.重启mysql
配置完成,通过show slave status \G查看 Slave_Io_Running Slave_Sql_Running 都为yes表示主从同步配置完成
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//从数据库常用命令 //启动复制线程 通常默认已启动 start slave //停止复制线程 stop slave //查看从数据库状态 show slave status //查看主数据库bin-log日志 show master logs //动态改变到主服务器的配置 change master to //查看从数据库的运行进程 show processlist |
从服务器无法同步时,使用以下方法进行修复
1 2 3 4 5 6 7 8 9 10 11 12 |
//方法一: slave stop; set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; slave start; //方法二: slave stop; show master status; change master to master_host="192.168.2.103",master_user="user2",master_password="123",master_port=3306,master_log_file="mysql- bin.000003",master_log_pos=107; slave start; |