MySQL 5.5主从复制(Replication)

简介

MySQL的主从复制(Replication),能够保持两台MySQL数据库的内容一致。由于其同步过程是异步的,因此备份数据库上作任何操做,都不会影响主数据库的性能。对游戏后台数据库而言,这是一个重大的优点:对备份数据库的查询、备份等操做都不会影响游戏的线上运行。配置主从复制有许多教程,但都很繁琐。我根据官方文档,总结出一个简单的配置流程。mysql

配置

  • 线上运行的数据库,称之为Master服务器;备份的数据库,称之为Slave服务器
  • 分别修改两台服务器上的MySQL配置文件/etc/mysql/my.cnf:
    • Master服务器上加入这两行(直接去掉注释便可):正则表达式

      server-id = 1
        log_bin = /var/log/mysql/mysql-bin.log
    • 而后重启MySQL:sql

      service mysql restart
    • Slave服务器加入这一行:数据库

      server-id = 2
    • 而后重启MySQL:服务器

      service mysql restart
  • 把Master数据库备份传给Slave数据库:
    • 方法一:MyISAM格式能够直接拷贝,速度快:
      • 在Master服务器上备份数据库,能够只有指定的数据库,不一样步mysql库:app

        mkdir /masterdb
          mysqlhotcopy --resetmaster --flushlog --addtodest --regexp=<数据库匹配正则表达式> /masterdb
      • 若是原来已经设置过slave,如今要恢复数据,那么
        • 先在Slave服务器上mysql中中止slave模式并重置:异步

          stop slave;
            reset slave;
        • 而后关闭mysql:性能

          stop mysql
        • 删除原有同名的数据库。
      • 中止mysql后,把备份的Master数据库目录传到Slave服务器上的mysql目录中,能够用scp命令拷贝:线程

        scp -r -P <端口> /masterdb/* root@<IP地址>:/Jpcq/MySQL/
      • 拷贝到Slave的文件须要修改owner:rest

        chown -R mysql:mysql *
      • 修改Slave的my.cnf文件,禁止同步mysql库:

        replicate-ignore-db=mysql
      • 启动mysql:

        start mysql
      • 从新开启slave模式,在mysql中执行:

        change master to master_host='<Master IP地址>', master_user='<用户名>', master_password='<密码>';
          start slave;
    • 方法二:使用mysqldump,通用,可是慢:

      • 在Master服务器上备份数据库:

        mysqldump --all-databases --master-data >apply_slave.sql
      • 把备份文件dbdump.db传到Slave服务器上,恢复数据库:

        mysql <apply_slave.sql
      • 在Slave服务器上开启slave模式,在mysql中执行:

        change master to master_host='<Master IP地址>', master_user='<用户名>', master_password='<密码>';
          start slave;

维护

  • Slave显示同步状态:

    show slave status\G;
  • 显示进程列表:

    show processlist\G;
  • Master显示正在同步的Slaves:

    show slave hosts;
  • Master显示最新binlog位置:

    show master status;

MySQL 5.5 - 5.7的改进

  • MySQL 5.5的主从复制是单线程的,性能受限。
  • MySQL 5.6的不一样数据库能够并行,单个数据库仍是顺序执行的。
  • MySQL 5.7再也不受限制,全部Master数据库并行执行的事务,Slave也能够并行执行。
  • MySQL 5.7的Slave还支持从多个Master同步数据库。
相关文章
相关标签/搜索