一台机器做主数据库、另外一个机器做从数据库。
假设:
Master (主库): 192.168.40.120
Slave (从库): 192.168.40.121
主数据库和从数据库都安装
wget https://dev.mysql.com/get/mysql80-community-release-el7-9.noarch.rpm
sudo rpm -ivh mysql80-community-release-el7-9.noarch.rpm
sudo yum install mysql-server -y
mysqld --initialize
chown mysql:mysql -R /var/lib/mysql
sudo chmod 750 /var/lib/mysql #注意这个权限不能设置成777,否则会启动失败
chown mysql:mysql -R /var/log/mysql/
sudo chmod 750 /var/log/mysql/
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld
获取密码
grep 'temp' /var/log/mysql/mysqld.log
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码123!';
CREATE USER 'root'@'%' IDENTIFIED BY '新密码123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
在主数据库修改:
vim /etc/my.cnf
在文件末尾追加:
--- 以下是新增/修改的配置 ---
mysqld
1. 解决日志权限报错:指定明确的日志路径
确保 /var/log/mysql 目录存在且归属为 mysql:mysql
log-error=/var/log/mysql/mysqld.log
2. 基础数据目录配置(根据实际安装情况确认,通常为默认值)
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
3. 字符集配置(避免中文乱码,游戏业务必备)
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
4. 主从复制核心配置(如果是主库,server-id 设为 1;从库设为 2 或其他唯一值)
server-id=1
log-bin=mysql-bin
binlog-format=ROW
5. 其他常用优化(可选)
max_connections=1000
innodb_buffer_pool_size=1G # 根据服务器内存大小调整,建议为物理内存的 50%-70%
校验配置文件是否修改正确执行:sudo mysqld --validate-config
重置失败启动次数
sudo systemctl reset-failed mysqld
重新启动
sudo systemctl restart mysqld
查看启动是否成功
sudo systemctl status mysqld
登录主库:
mysql -uroot -p新密码123!
-- 创建用于主从复制的用户
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'ReplPass123!';
-- 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
-- 查看主库状态,记录 File 和 Position,后续从库配置需要用到
SHOW MASTER STATUS;

配置从库
vim /etc/my.cnf
文件追加:
mysqld
服务器唯一ID,必须与主库不同,从库通常设为2,3...
server-id = 2
开启中继日志
relay-log = relay-bin
字符集统一
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
可选:如果从库只读,防止误写
read-only = 1
super-read-only = 1
重启:
sudo systemctl restart mysqld
登录从库 MySQL,执行以下 SQL(替换为主库的实际 IP、用户、密码及之前记录的 File/Position):
mysql -uroot -p新密码123!
登录后执行:
-- 停止奴隶线程
STOP SLAVE;
-- 配置主库信息
CHANGE MASTER TO
MASTER_HOST='192.168.40.120',//主数据的地址
MASTER_USER='repl_user',//主数据建立的登录账号
MASTER_PASSWORD='ReplPass123!',//主数据建立的登录账号的密码
MASTER_LOG_FILE='binlog.000001',//上面记录的File 文件名
MASTER_LOG_POS=1410;//上面记录的Position
-- 启动奴隶线程
START SLAVE;
验证同步状态:
SHOW SLAVE STATUS\G;

测试现在在主数据创建一个数据,从数据库也会出现一条数据