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; 查看配置的信息:

    在输出的信息中的Slave_IO_Running和Slave_SQL_Running都为yes,那么表示配置成功
 
6. 主数据库上更新内容,验证从数据库是否正确同步数据。
 
 
 
 
 
 
posted @ 2018-01-03 11:51  坚强的小蚂蚁  阅读(199)  评论(0编辑  收藏  举报