MySQL 8 主从同步安装与配置
拟机,由 CentOS 换成了 Ubuntu,用 Xteminal 连接之后,为了方便改配置文件,把文件权限改成 666 了,结果因为这个调半天,一直以为是网络问题或者是配置问题。要注意为了防止配置文件被未经授权的用户修改,MySQL 会忽略权限为“全局可写”的配置文件。
1. 环境准备
- 主服务器(Master):
- IP:
192.168.1.50
- 操作系统:Ubuntu 22.04
- MySQL 版本:8.0.41
- IP:
- 从服务器(Slave):
- IP:
192.168.1.51
- 操作系统:Ubuntu 22.04
- MySQL 版本:8.0.41
- IP:
2. 安装 MySQL 8
2.1 在主服务器和从服务器上安装 MySQL
-
更新系统包:
sudo apt update sudo apt upgrade -y
-
安装 MySQL Server:
sudo apt install mysql-server -y
-
启动 MySQL 服务并设置开机自启:
sudo systemctl start mysql sudo systemctl enable mysql
-
运行安全脚本,设置 root 密码并移除不安全配置:
sudo mysql_secure_installation
3. 配置主服务器(Master)
3.1 修改主服务器配置文件
-
编辑 MySQL 配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
-
添加或修改以下内容:
[mysqld] # 启用二进制日志(必须) log_bin = /var/log/mysql/mysql-bin.log # 设置唯一的服务器 ID(必须) server-id = 1 # 可选:指定需要同步的数据库 binlog_do_db = your_database_name # 可选:忽略系统库的同步 binlog_ignore_db = mysql binlog_ignore_db = information_schema binlog_ignore_db = performance_schema binlog_ignore_db = sys
-
保存并退出,然后重启 MySQL 服务:
sudo systemctl restart mysql
3.2 创建复制用户
-
登录 MySQL:
sudo mysql -u root -p
-
创建用于复制的用户并授权:
CREATE USER 'replica_user'@'192.168.1.51' IDENTIFIED WITH 'caching_sha2_password' BY 'secure_password'; GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'192.168.1.51'; FLUSH PRIVILEGES;
-
获取主服务器的二进制日志状态:
SHOW MASTER STATUS;
记录
File
和Position
的值,稍后会在从服务器上用到。
4. 配置从服务器(Slave)
4.1 修改从服务器配置文件
-
编辑 MySQL 配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
-
添加或修改以下内容:
[mysqld] # 设置唯一的服务器 ID(必须) server-id = 2 # 启用中继日志(必须) relay_log = /var/log/mysql/mysql-relay-bin.log # 可选:指定需要同步的数据库 replicate_do_db = your_database_name # 可选:忽略系统库的同步 replicate_ignore_db = mysql replicate_ignore_db = information_schema replicate_ignore_db = performance_schema replicate_ignore_db = sys
-
保存并退出,然后重启 MySQL 服务:
sudo systemctl restart mysql
4.2 配置从服务器连接主服务器
-
登录 MySQL:
sudo mysql -u root -p
-
配置主从连接:
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.1.50', SOURCE_USER='replica_user', SOURCE_PASSWORD='secure_password', SOURCE_LOG_FILE='mysql-bin.000001', -- 替换为主服务器的 File 值 SOURCE_LOG_POS=123; -- 替换为主服务器的 Position 值
-
启动复制:
START REPLICA;
-
检查复制状态:
SHOW REPLICA STATUS\G
确保
Replica_IO_Running
和Replica_SQL_Running
均为Yes
。
5. 验证主从同步
5.1 在主服务器上插入测试数据
-
登录 MySQL:
sudo mysql -u root -p
-
创建测试数据库和表:
CREATE DATABASE your_database_name; USE your_database_name; CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50)); INSERT INTO test_table VALUES (1, 'Test Data');
5.2 在从服务器上检查数据
-
登录 MySQL:
sudo mysql -u root -p
-
检查数据是否同步:
USE your_database_name; SELECT * FROM test_table;
如果数据同步成功,说明主从同步配置完成。
6. 常见问题排查
6.1 主从服务器 server-id
相同
- 错误信息:
[ERROR] [MY-013117] [Repl] Replica I/O for channel '': Fatal error: The replica I/O thread stops because source and replica have equal MySQL server ids.
- 解决方法:
- 确保主从服务器的
server-id
不同。 - 修改配置文件后重启 MySQL 服务。
- 确保主从服务器的
6.2 配置文件权限问题
- 错误信息:
mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/slave.cnf' is ignored.
- 解决方法:
- 修改配置文件的权限:
sudo chmod 644 /etc/mysql/conf.d/slave.cnf
- 重启 MySQL 服务。
- 修改配置文件的权限:
6.3 认证插件问题
- 错误信息:
Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
- 解决方法:
- 启用 TLS/SSL 加密连接。
- 或者将复制用户的认证插件切换为
mysql_native_password
:ALTER USER 'replica_user'@'192.168.1.51' IDENTIFIED WITH 'mysql_native_password' BY 'secure_password';
7. 总结
-
主从同步配置步骤:
- 安装 MySQL。
- 配置主服务器的
server-id
和二进制日志。 - 创建复制用户并授权。
- 配置从服务器的
server-id
和中继日志。 - 配置从服务器连接主服务器并启动复制。
- 验证主从同步。
-
注意事项:
- 确保主从服务器的
server-id
不同。 - 确保配置文件的权限正确。
- 使用安全的认证方式(如 TLS/SSL 或
mysql_native_password
)。 - 定期检查复制状态和错误日志。
- 确保主从服务器的
通过以上步骤,你可以成功搭建 MySQL 8 的主从同步环境。