开发一个新项目需要用到
mysql 主从读写分离,开发环境来搭建一主一从的
mysql 满足基本需要,记录一下具体步骤。
现状和需求
有两台服务器分别运行一个
mysql 5.7 的实例:
| 服务器IP |
端口 |
mysql实例 |
主从 |
| 192.168.0.10 |
3306 |
mysql1 |
主 |
| 192.168.0.11 |
3307 |
mysql2 |
从 |
mysql1 有需要设置主从的数据库
paca,设置
mysql1 为主库,
mysql2 为从库,为数据库
paca 设置一主一从,具体操作步骤。
实现步骤
配置主服务器 mysql1
修改 mysql1 配置
在
mysql1 服务器上,设置服务
id 并打开二进制日志,打开
MySQL 配置文件(通常是
/etc/my.cnf 或
/etc/mysql/my.cnf),并进行以下修改:
[mysqld]
server-id = 1
log-bin = mysql-bin
重启 mysql
重启
mysql 确保配置生效,并确认二进制日志
log bin 已开启。
sudo systemctl restart mysql
进入
mysql 确认已开启。
mysql> SHOW VARIABLES LIKE 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set, 1 warning (0.00 sec)
创建复制用户
进入
mysql 创建用于复制的用户,这里创建的用户为
repl_user,密码
12346,根据需求修改。
CREATE USER 'repl_user'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
记录二进制
进入
mysql 查看当前二进制日志文件和位置。
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 110200 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
记录
File 和
Position 的值,后面会在配置从服务器时用到。
配置从服务器
编辑 MySQL 配置文件
在
mysql2 服务器上,打开
MySQL 配置文件,并进行以下修改:
[mysqld]
server-id=2
replicate_do_db=paca
这里的
replicate_do_db 表示需要复制的数据库,如果不在从数据库配置这个参数,将会复制
mysql1 上的所有数据库。
重启 mysql
sudo systemctl restart mysql
从主服务器复制数据库
使用
mysqldump 或其他数据库同步工具将主服务器的
paca 数据库同步到从服务器的
paca。
设置从服务器复制配置
进入
mysql 运行以下命令配置从服务器。
CHANGE MASTER TO
MASTER_HOST='192.168.0.10',
MASTER_PORT=3306,
MASTER_USER='repl_user',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=110200;
START SLAVE;
其中的
MASTER_LOG_FILE 和
MASTER_LOG_POS 的值使用上面记录的主服务器的二进制文件和位置信息。
检查复制状态
SHOW SLAVE STATUS\G;
看到类似的输出:
mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.10
Master_User: repl_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 110200
Relay_Log_File: f2bb61719e78-relay-bin.000004
Relay_Log_Pos: 108106
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: paca
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 110200
Relay_Log_Space: 108320
...
可以看到
Slave_IO_Running: Yes 和
Slave_SQL_Running: Yes 并且
Slave_IO_State: Waiting for master to send event 可见主从已经设置成功了。
接下来可以在主库做一些增删改操作,可以看到从库自动同步了。
注意问题
- 在开始配置到确认配置前,应该保证没有新的增删改发生在主服务器,如果数据发生了变化,为保证数据一致,则需要重新将变化同步到从服务器的数据库且配置从服务器的
Position。
- 保证从服务器可以访问主服务器的
mysql 服务,可以在配置前在从服务器上使用 mysql 命令连接主服务器测试。