zoukankan      html  css  js  c++  java
  • 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. 主数据库上更新内容,验证从数据库是否正确同步数据。
     
     
     
     
     
     
  • 相关阅读:
    洛谷 P1291 [SHOI2002]百事世界杯之旅 解题报告
    洛谷 P1338 末日的传说 解题报告
    洛谷 P3952 时间复杂度 解题报告
    vector-erase
    STL之--插入迭代器(back_inserter,inserter,front_inserter的区别
    STL之--插入迭代器(back_inserter,inserter,front_inserter的区别
    vector-end
    vector-end
    vector-empty
    vector-empty
  • 原文地址:https://www.cnblogs.com/regit/p/8182751.html
Copyright © 2011-2022 走看看