MySQL 复制是一个允许来自一个数据库服务器的数据自动复制到一个或多个服务器的过程.
MySQL 支持许多复制拓扑, 其中主 / 从拓扑是一个最着名的拓扑之一, 其中一个数据库服务器充当主服务器, 而一个或多个服务器充当从服务器. 默认情况下, 复制是异步的, 其中主服务器将描述数据库修改的事件发送到其二进制日志, 并且从服务器在准备好时请求事件.
本教程介绍了在 Ubuntu 18.04 上使用一个主服务器和一个从服务器进行 MySQL 主 / 从复制的基本示例. 同样的步骤适用于 MariaDB.
此类复制拓扑最适合部署用于读取扩展的只读副本, 用于灾难恢复和分析作业的实时数据库备份.
必要条件
此示例假设您有两台运行 Ubuntu 18.04 的服务器, 它们可以通过专用网络相互通信. 如果您的托管服务提供商不提供私有 IP 地址, 您可以使用公共 IP 地址并配置防火墙, 以允许端口 3306 上的流量仅来自可信来源.
此示例中的服务器具有以下 IP:
- Master IP(主服务器 IP): 192.168.100.190
- Slave IP(从服务器 IP): 192.168.100.236
安装 MySQL
默认的 Ubuntu 18.04 存储库包含 MySQL 5.7 版. 为避免出现任何问题, 最好在两台服务器上安装相同的 MySQL 版本.
在 Master 服务器上安装 MySQL:
- sudo apt-get update
- sudo apt-get install MySQL-server
使用相同的命令在 Slave 服务器上安装 MySQL:
- sudo apt-get update
- sudo apt-get install MySQL-server
配置主服务器
第一步是配置主 MySQL 服务器. 我们将进行以下更改:
将 MySQL 服务器设置为侦听专用 IP
设置唯一的服务器 ID
启用二进制日志记录
为此, 请打开 MySQL 配置文件并取消注释或设置以下内容:
- sudo nano /etc/MySQL/MySQL.conf.d/mysqld.cnf
- master:/etc/MySQL/MySQL.conf.d/mysqld.cnf
- bind-address = 192.168.100.190
- server-id = 1
- log_bin = /var/log/MySQL/MySQL-bin.log
完成后, 重新启动 MySQL 服务以使更改生效
sudo systemctl restart MySQL
下一步是创建一个新的复制用户. 键入以下内容以 root 用户身份登录 MySQL 服务器:
sudo MySQL
在 MySQL 提示符内, 运行以下 SQL 查询, 这些查询将创建副本用户并向用户授予 REPLICATION SLAVE 权限:
- CREATE USER 'replica'@'192.168.100.236' IDENTIFIED BY 'replica_password';
- GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.100.236';
确保使用从属 IP 地址更改 IP. 您可以根据需要为用户命名.
在仍然在 MySQL 提示符内时, 执行以下命令将打印二进制文件名和位置.
SHOW MASTER STATUS\G
输出:
- *************************** 1. row ***************************
- File: MySQL-bin.000001
- Position: 629
- Binlog_Do_DB:
- Binlog_Ignore_DB:
- Executed_Gtid_Set:
- 1 row in set (0.00 sec)
记下文件名'mysql-bin.000001'和位置'629'. 配置从属服务器时, 您将需要这些值. 您的服务器上的这些值可能会有所不同.
配置从属服务器
与上面的主服务器一样, 我们将对从服务器进行以下更改:
将 MySQL 服务器设置为侦听专用 IP
设置唯一的服务器 ID
启用二进制日志记录
打开 MySQL 配置文件并编辑以下行:
- sudo nano /etc/MySQL/MySQL.conf.d/mysqld.cnf
- slave:/etc/MySQL/MySQL.conf.d/mysqld.cnf
- bind-address = 192.168.100.236
- server-id = 2
- log_bin = /var/log/MySQL/MySQL-bin.log
重启 MySQL 服务:
sudo systemctl restart MySQL
下一步是配置从服务器用于连接主服务器的参数. 登录 MySQL shell:
sudo MySQL
首先, 停止 slave 线程:
STOP SLAVE;
运行以下查询, 该查询将设置从服务器来复制主服务器:
- CHANGE MASTER TO
- MASTER_HOST='192.168.100.190',
- MASTER_USER='replica',
- MASTER_PASSWORD='replica_password',
- MASTER_LOG_FILE='mysql-bin.000001',
- MASTER_LOG_POS=629;
确保使用正确的 IP 地址, 用户名. 和密码. 日志文件名称和位置必须与从主服务器获取的值相同.
完成后, 启动从线程.
START SLAVE;
测试配置
此时, 您应该有一个正常工作的主 / 从复制设置.
要验证一切是否按预期工作, 我们将在主服务器上创建一个新数据库:
- sudo MySQL
- CREATE DATABASE replicatest;
登录到从属 MySQL shell:
sudo MySQL
列出数据库:
SHOW DATABASES;
您会注意到在主服务器上创建的数据库是在从服务器上复制的:
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | MySQL |
- | performance_schema |
- | replicatest |
- | sys |
- +--------------------+
- 5 rows in set (0.00 sec)
总结
在本教程中, 我们展示了您创建 MySQL 主 / 从复制.
如果您有任何疑问, 请随时发表评论.
来源: http://www.linuxidc.com/Linux/2019-05/158696.htm