MySQL 主从复制 实例讲解

MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。
  • 在本文中我们主要介绍 mysql 的主从复制,读写分离在以后的文章中会涉及到

实现MySQL主从复制需要进行的配置
  • 主服务器:
    • 开启二进制日志
    • 配置唯一的 server-id
    • 获得master二进制日志文件名及位置
    • 创建一个用于slave和master通信的用户账号
  • 从服务器:
    • 配置唯一的 server-id
    • 使用master分配的用户账号读取master二进制日志
    • 启用slave服务

  • 环境准备
    • 准备好两台云主机或者虚拟机
      • 我准备的为 京东云腾讯云 的两台主机 ,系统为centos 7.4
    • 主从数据库的版本最好可以一致
      • 本实例讲解中为 Mysql 5.7.22
    • 主从数据库的内容最好可以一致
      • 本次实例讲解中,Mysql 数据库都为空

  • 主数据库 master 配置

    • 修改 my.cnf 文件 在 [mysqld] 加上如下的配置
    [mysqld]
    log-bin=mysql-bin     #开启二进制日志
    server-id=1           #设置server-id
    character_set_server=utf8
    init_connect='SET NAMES utf8'
    • 重启 mysql 如果是yum安装可以使用 systemctl restart mysqld
    • 登陆Mysql,创建用于同步的用户账号
    CREATE USER 'repl'@'139.199.***.***' IDENTIFIED BY 'YourPassword9#';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'139.199.***.***';
    FLUSH PRIVILEGES;
    139.199.***.***  这里填上自己从服务器的 ip 
    • 查看master状态,记录二进制文件名 mysql-bin.000001 和位置 2930
    mysql>  SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |     2930 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    

  • 从数据库 slave 设置

    • 修改 my.cnf 文件 在 [mysqld] 加上如下的配置
    [mysqld]
    server-id=2           #设置server-id
    character_set_server=utf8
    init_connect='SET NAMES utf8'
    • 重启 mysql 如果是yum安装可以使用 systemctl restart mysqld
    • 登陆Mysql,并执行同步SQL语句
    mysql> CHANGE MASTER TO
    ->     MASTER_HOST='116.196.***.***',             # 主服务器ip
    ->     MASTER_USER='repl',                        # 主服务器登陆名
    ->     MASTER_PASSWORD='YourPassword9#',          # 主服务器登陆密码
    ->     MASTER_LOG_FILE='mysql-bin.000001',        # 二进制文件的名称
    ->     MASTER_LOG_POS=2930;                       # 二进制文件的位置
    • 启动 slave 同步进程
    mysql> start slave;
    Query OK, 0 rows affected (0.00 sec)
    
    • 查看 slave 状态
    mysql> show slave status\G;
    如果以下两项都是 yes 就表示主从同步设置成功了
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    

参考博客

本文章首发在 Laravel China 社区