mysql主从复制
一. 准备工作
本实验在两台ubuntu14上实验,用的是mysql5.6,进行主从备份的前提条件必须是mysql版本相同,并且有相同的初始数据
主服务器IP:192.168.0.221
从服务器IP:192.168.0.222
卸载老版本mysql
apt-get autoremove --purge mysql-server-5.*
apt-get remove mysql-common
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P #清除残留数据
安装mysql5.6
apt-get install -y mysql-server-5.6 mysql-client-5.6 libmysqlclient-dev
二. 主服务器上设置mysql
1. 在主服务上,设置一个复制使用的账户,并授予REPLICATION SLAVE权限,这里创建一个用户rep1,可以从192.168.0.222 (从服务器ip) 的主机进行连接
mysql > grant replication slave on *.* to 'rep1'@'192.168.0.222' identified by '123';
注意:
1)如果想允许所有主机连接主数据库,把后面的IP地址改为"%"
2)在主数据库里导入数据库时,要导入到rep1用户中,此时会出现权限问题不能导入,需要增加权限,可参考https://yq.aliyun.com/articles/328561。要求不严格的话直接赋予所有权限即可...
2. 修改my.cnf配置
第一步,把bind-address=127.0.0.1注释掉,或者把地址修改为允许远程访问的ip地址,比如192.168.0.222。 如果允许所有ip访问,可以改为0.0.0.0
第二步,开启 BINLOG,并设置 server-id 的值。这两个参数的修改需要重新启动数据库服务才可以生效。
My.cnf 中修改:
[mysqld]
log-bin = /var/log/mysql/mysql-bin.log (5.6默认是这个,也可以改为其他路径)
server-id = 1
#binlog-ignore-db=testdb1 表示不需要同步的数据库
#binlog-do-db=testdb 表示需要同步的数据库
3. 在主服务器上,设置读锁定有效,确保没有数据库操作,以便获得一个一致性的快照
mysql > flush tables with read lock
4. 主服务器上获取当前2进制日志名和偏移量值,以便在从数据库启动后,从这个点开始进行数据恢复
mysql > show master status;
5. 现在主数据库已经停止更新操作,需要生成主数据库的备份,可以直接cp或者使用mysqldump,比如mysqldump -uroot -p --all-database > all.sql 备份所有数据库。
6. 主数据库备份好后,恢复写操作
unlock tables;
7. 把数据导入到从从服务器数据库
三. 从服务器数据库设置
1. 修改my.cnf,增加server-id参数,值必须是唯一的
[mysqld]
server-id = 2
#replicate-ignore-db=testdb1 不需要同步的数据库
#replicate-do-db=testdb 需要同步的数据库
2. 使用--skip-slave-start 选项启动从数据库,这样不会立即启动从数据库服务上的复制进程,方便对从数据库进行更多配置,mysql5.6执行 ./usr/bin/mysqld_safe --skip-slave-start &
另一种方式是用root用户正常进入mysql后,执行stop slave命令 (推荐这种方法,简单)
3. 对从数据库服务器做相应设置,指定复制使用的用户,主数据库服务器的 IP、端口以及开始执行复制的日志文件和位置等
mysql > change master to
-> master_host = '192.168.0.221',
-> master_user='rep1',
-> master_password='123',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=120; #注意这里的120不能有引号,否则会有语法错误
#最后这两项是在上面操作主数据库中show master status得到的数据
4. 启动slave线程 mysql> start slave;
5. 执行show processlist \G 查看,或者显示2个connect表示设置成功,另一种方法是mysql> show slave status \G; 查看配置的信息: