给MySQL添加从库

  • ~2.03K 字
  1. 1. 操作主库
    1. 1.1. 开启 binlog
    2. 1.2. 创建用于同步的用户账号
    3. 1.3. 导出当前数据库
  2. 2. 从库操作
    1. 2.1. 安装数据库

操作主库

开启 binlog

1
2
3
[mysqld]
log_bin=mysql-bin
server-id=1

然后重启数据库: systemctl restart mariadb

创建用于同步的用户账号

  1. 登录主库:
    1
    mysql -h127.0.0.1 -uroot -p
  2. 创建用户:
    1
    CREATE USER 'repl'@'%' IDENTIFIED BY 'oRP0s*Y*e$WJz1'; -- 自己生成一个密码
  3. 授权:
    1
    2
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    flush privileges;

导出当前数据库

导入前需要停止写入,否则可能会有主键冲突。

1
mysqldump -uroot -p -h127.0.0.1 --master-data=2 --single-transaction --skip-tz-utc --all-databases > db.sql
  • –master-data 默认值为 1,会将 CHANGE MASTER TO 语句写入到 sql 文件中,如果将 master-data 设置为 2,则会以注释写入到 sql 文件中。
  • –single-transaction 在 dump 过程中保证数据的一致性,这个选项对 InnoDB 的数据表很有用,且不会锁表。但是这个不能保证 MyISAM 表和 MEMORY 表的数据一致性。

从库操作

安装数据库

  1. 安装软件:
    1
    2
    3
    4
    5
    6
    7
    8
    pacman -S mariadb
    cd /var/lib/mysql
    mariadb-install-db
    mv data/* .
    rmdir data
    systemctl restart mariadb
    systemctl enable mariadb
    mariadb-secure-installation # 安装的时候密码写什么无所谓,导入的时候会被强制刷为主库的密码
  2. 导入库:
    1
    mysql -uroot -p -h127.0.0.1 < db.sql # 写临时密码
  3. 设置为强制读库:
    1
    2
    3
    4
    5
    # /etc/my.cnf.d/server.cnf
    [mysqld]
    server-id=2
    read-only
    bind-address=11.128.0.18
  4. 配置从库:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CHANGE MASTER TO
    MASTER_HOST='11.128.0.18',
    MASTER_USER='repl',
    MASTER_PASSWORD='oRP0s*Y*e$WJz1', -- 刚才生成的密码
    MASTER_PORT=3306,
    MASTER_LOG_FILE='binlog.000001', -- 这两个选项在 head -n 30 db.sql 就能看到
    MASTER_LOG_POS=144, -- 这两个选项在 head -n 30 db.sql 就能看到
    MASTER_HEARTBEAT_PERIOD=180,
    MASTER_SSL=0, -- 关闭 ssl
    MASTER_CONNECT_RETRY=10;
  5. 启动从库:
    1
    2
    start slave;
    show slave status \G;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    *************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
    Master_Host: *.*.*.*
    Master_User: repl
    Master_Port: 3306
    Connect_Retry: 10
    Master_Log_File: mysql-bin.000001
    Read_Master_Log_Pos: 1234
    Relay_Log_File: *-bin.000008
    Relay_Log_Pos: 1717
    Relay_Master_Log_File: mysql-bin.000001
    Slave_IO_Running: Yes -- 有这个就成功
    Slave_SQL_Running: Yes -- 有这个就成功

参考: https://zahui.fan/posts/86a9c8f5/

分享这一刻
让朋友们也来瞅瞅!