提交
This commit is contained in:
1 parent
48109ff1e7
commit
4e34c7eb36
60 files changed
+9583
-139
No files matched your search
@@ -0,0 +1,450 @@
|
||||
# 基于现有my.cnf的MySQL主从复制配置指南
|
||||
|
||||
## 📋 当前配置状态
|
||||
|
||||
✅ **67机器(主库)**: `/etc/my.cnf` - 无主从配置,需要添加
|
||||
✅ **68机器(从库)**: `/etc/my.cnf` - 无主从配置,需要添加
|
||||
✅ **数据状态**: 两个数据库的`hzdyjs_xg`表模型和数据已一致
|
||||
|
||||
---
|
||||
|
||||
## 🚀 快速配置(推荐使用脚本)
|
||||
|
||||
### 方法一:使用自动化脚本(最简单)
|
||||
|
||||
#### 步骤1:在主库(67)执行
|
||||
|
||||
```bash
|
||||
# 1. 进入部署脚本目录
|
||||
cd /Users/wuzilong/work/00code/hzdyjs_xg/docs/部署文档/生产环境双机部署方案/部署脚本/
|
||||
|
||||
# 2. 赋予执行权限
|
||||
chmod +x setup-mysql-replication.sh
|
||||
|
||||
# 3. 执行主库配置
|
||||
./setup-mysql-replication.sh
|
||||
```
|
||||
|
||||
**脚本会自动完成:**
|
||||
- ✅ 在`/etc/my.cnf`末尾添加主库配置
|
||||
- ✅ 重启MySQL服务
|
||||
- ✅ 创建复制用户`repl@172.16.0.68`
|
||||
- ✅ 显示`SHOW MASTER STATUS`输出
|
||||
|
||||
**⚠️ 重要:记录输出的binlog信息**
|
||||
```
|
||||
File: mysql-bin.000001
|
||||
Position: 154
|
||||
```
|
||||
|
||||
#### 步骤2:在从库(68)执行
|
||||
|
||||
```bash
|
||||
# 1. 进入部署脚本目录
|
||||
cd /Users/wuzilong/work/00code/hzdyjs_xg/docs/部署文档/生产环境双机部署方案/部署脚本/
|
||||
|
||||
# 2. 执行从库配置
|
||||
./setup-mysql-replication.sh
|
||||
```
|
||||
|
||||
**输入步骤1记录的binlog信息:**
|
||||
- `MASTER_LOG_FILE`: 输入File值(如:`mysql-bin.000001`)
|
||||
- `MASTER_LOG_POS`: 输入Position值(如:`154`)
|
||||
|
||||
#### 步骤3:验证配置
|
||||
|
||||
```bash
|
||||
# 在从库执行
|
||||
mysql -u root -p -e "SHOW SLAVE STATUS\G" | grep -E "Slave_IO_Running|Slave_SQL_Running|Seconds_Behind_Master"
|
||||
```
|
||||
|
||||
**正常输出:**
|
||||
```
|
||||
Slave_IO_Running: Yes
|
||||
Slave_SQL_Running: Yes
|
||||
Seconds_Behind_Master: 0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 手动配置方法(如果脚本执行失败)
|
||||
|
||||
### 主库(67)手动配置
|
||||
|
||||
#### 1. 编辑主库配置文件
|
||||
|
||||
```bash
|
||||
vi /etc/my.cnf
|
||||
```
|
||||
|
||||
**在文件末尾(`[client]`段之后)添加以下配置:**
|
||||
|
||||
```ini
|
||||
# 主从复制配置
|
||||
server-id = 1
|
||||
log-bin = mysql-bin
|
||||
binlog-format = ROW
|
||||
binlog-do-db = hzdyjs_xg
|
||||
expire_logs_days = 7
|
||||
max_binlog_size = 500M
|
||||
|
||||
# 性能优化配置(减少主从复制对主库性能影响)
|
||||
# 使用性能优先方案,性能影响约1-2%
|
||||
sync_binlog = 0
|
||||
binlog_cache_size = 2M
|
||||
max_binlog_cache_size = 512M
|
||||
```
|
||||
|
||||
**完整的67机器my.cnf应该是:**
|
||||
|
||||
```ini
|
||||
[mysqld]
|
||||
# 基础配置
|
||||
port = 3306
|
||||
default-storage-engine = InnoDB
|
||||
datadir = /iflytek/mysql/data/mysql
|
||||
log-error=/iflytek/mysql/log/mysqld.log
|
||||
socket = /var/lib/mysql/mysql.sock
|
||||
pid-file = /var/run/mysqld/mysqld.pid
|
||||
lower_case_table_names = 1
|
||||
character-set-server = utf8mb4
|
||||
collation-server = utf8mb4_unicode_ci
|
||||
|
||||
# 安全优化
|
||||
ft_min_word_len = 1
|
||||
symbolic-links=0
|
||||
|
||||
# 内存配置(核心)
|
||||
innodb_buffer_pool_size = 20G
|
||||
innodb_buffer_pool_instances = 16
|
||||
innodb_buffer_pool_chunk_size = 128M
|
||||
key_buffer_size = 256M
|
||||
|
||||
# I/O配置
|
||||
innodb_log_file_size = 2G
|
||||
innodb_log_buffer_size = 256M
|
||||
innodb_flush_log_at_trx_commit = 1
|
||||
innodb_flush_method = O_DIRECT
|
||||
innodb_io_capacity = 2000
|
||||
innodb_io_capacity_max = 4000
|
||||
|
||||
# 连接配置
|
||||
max_connections = 1000
|
||||
thread_cache_size = 100
|
||||
back_log = 500
|
||||
table_open_cache = 4096
|
||||
table_definition_cache = 4096
|
||||
|
||||
# 查询优化(关键调整)
|
||||
join_buffer_size = 8M
|
||||
sort_buffer_size = 8M
|
||||
read_buffer_size = 2M
|
||||
read_rnd_buffer_size = 4M
|
||||
tmp_table_size = 1G
|
||||
max_heap_table_size = 1G
|
||||
|
||||
# 网络配置
|
||||
max_allowed_packet = 256M
|
||||
net_buffer_length = 16K
|
||||
wait_timeout = 300
|
||||
interactive_timeout = 300
|
||||
|
||||
# 高级配置
|
||||
innodb_file_per_table = ON
|
||||
innodb_thread_concurrency = 0
|
||||
innodb_read_io_threads = 8
|
||||
innodb_write_io_threads = 8
|
||||
innodb_page_cleaners = 8
|
||||
|
||||
# 监控日志
|
||||
slow_query_log = ON
|
||||
slow_query_log_file = /iflytek/mysql/log/slow.log
|
||||
long_query_time = 2
|
||||
log_queries_not_using_indexes = OFF
|
||||
performance_schema = ON
|
||||
|
||||
# 主从复制配置
|
||||
server-id = 1
|
||||
log-bin = mysql-bin
|
||||
binlog-format = ROW
|
||||
binlog-do-db = hzdyjs_xg
|
||||
expire_logs_days = 7
|
||||
max_binlog_size = 500M
|
||||
|
||||
# 性能优化配置(减少主从复制对主库性能影响)
|
||||
sync_binlog = 0
|
||||
binlog_cache_size = 2M
|
||||
max_binlog_cache_size = 512M
|
||||
|
||||
[mysql]
|
||||
default-character-set = utf8mb4
|
||||
|
||||
[client]
|
||||
default-character-set = utf8mb4
|
||||
socket = /var/lib/mysql/mysql.sock
|
||||
```
|
||||
|
||||
#### 2. 重启MySQL服务
|
||||
|
||||
```bash
|
||||
systemctl restart mysqld
|
||||
sleep 5
|
||||
|
||||
# 检查MySQL是否正常启动
|
||||
systemctl status mysqld
|
||||
```
|
||||
|
||||
#### 3. 创建复制用户
|
||||
|
||||
```bash
|
||||
mysql -u root -p <<EOF
|
||||
CREATE USER IF NOT EXISTS 'repl'@'172.16.0.68' IDENTIFIED BY 'Repl@123456';
|
||||
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.16.0.68';
|
||||
FLUSH PRIVILEGES;
|
||||
SHOW MASTER STATUS;
|
||||
EOF
|
||||
```
|
||||
|
||||
**⚠️ 重要:记录输出的`File`和`Position`值**
|
||||
|
||||
---
|
||||
|
||||
### 从库(68)手动配置
|
||||
|
||||
#### 1. 编辑从库配置文件
|
||||
|
||||
```bash
|
||||
vi /etc/my.cnf
|
||||
```
|
||||
|
||||
**在文件末尾(`[client]`段之后)添加以下配置:**
|
||||
|
||||
```ini
|
||||
# 主从复制配置
|
||||
server-id = 2
|
||||
relay-log = mysql-relay-bin
|
||||
read-only = 1
|
||||
replicate-do-db = hzdyjs_xg
|
||||
```
|
||||
|
||||
**完整的68机器my.cnf应该是:**
|
||||
|
||||
```ini
|
||||
[mysqld]
|
||||
# 基础配置
|
||||
port = 3306
|
||||
default-storage-engine = InnoDB
|
||||
datadir = /iflytek/mysql/data/mysql
|
||||
log-error=/iflytek/mysql/log/mysqld.log
|
||||
socket = /var/lib/mysql/mysql.sock
|
||||
pid-file = /var/run/mysqld/mysqld.pid
|
||||
lower_case_table_names = 1
|
||||
character-set-server = utf8mb4
|
||||
collation-server = utf8mb4_unicode_ci
|
||||
|
||||
# 安全优化
|
||||
ft_min_word_len = 1
|
||||
symbolic-links=0
|
||||
|
||||
# 内存配置(核心)
|
||||
innodb_buffer_pool_size = 20G
|
||||
innodb_buffer_pool_instances = 16
|
||||
innodb_buffer_pool_chunk_size = 128M
|
||||
key_buffer_size = 256M
|
||||
|
||||
# I/O配置
|
||||
innodb_log_file_size = 2G
|
||||
innodb_log_buffer_size = 256M
|
||||
innodb_flush_log_at_trx_commit = 1
|
||||
innodb_flush_method = O_DIRECT
|
||||
innodb_io_capacity = 2000
|
||||
innodb_io_capacity_max = 4000
|
||||
|
||||
# 连接配置
|
||||
max_connections = 1000
|
||||
thread_cache_size = 100
|
||||
back_log = 500
|
||||
table_open_cache = 4096
|
||||
table_definition_cache = 4096
|
||||
|
||||
# 查询优化(关键调整)
|
||||
join_buffer_size = 8M
|
||||
sort_buffer_size = 8M
|
||||
read_buffer_size = 2M
|
||||
read_rnd_buffer_size = 4M
|
||||
tmp_table_size = 1G
|
||||
max_heap_table_size = 1G
|
||||
|
||||
# 网络配置
|
||||
max_allowed_packet = 256M
|
||||
net_buffer_length = 16K
|
||||
wait_timeout = 300
|
||||
interactive_timeout = 300
|
||||
|
||||
# 高级配置
|
||||
innodb_file_per_table = ON
|
||||
innodb_thread_concurrency = 0
|
||||
innodb_read_io_threads = 8
|
||||
innodb_write_io_threads = 8
|
||||
innodb_page_cleaners = 8
|
||||
|
||||
# 监控日志
|
||||
slow_query_log = ON
|
||||
slow_query_log_file = /iflytek/mysql/log/slow.log
|
||||
long_query_time = 2
|
||||
log_queries_not_using_indexes = OFF
|
||||
performance_schema = ON
|
||||
|
||||
# 主从复制配置
|
||||
server-id = 2
|
||||
relay-log = mysql-relay-bin
|
||||
read-only = 1
|
||||
replicate-do-db = hzdyjs_xg
|
||||
|
||||
[mysql]
|
||||
default-character-set = utf8mb4
|
||||
|
||||
[client]
|
||||
default-character-set = utf8mb4
|
||||
socket = /var/lib/mysql/mysql.sock
|
||||
```
|
||||
|
||||
#### 2. 重启MySQL服务
|
||||
|
||||
```bash
|
||||
systemctl restart mysqld
|
||||
sleep 5
|
||||
|
||||
# 检查MySQL是否正常启动
|
||||
systemctl status mysqld
|
||||
```
|
||||
|
||||
#### 3. 配置主从复制
|
||||
|
||||
```bash
|
||||
# 替换下面的值为主库的实际值(从主库SHOW MASTER STATUS获取)
|
||||
MASTER_LOG_FILE="mysql-bin.000001" # 替换为实际值
|
||||
MASTER_LOG_POS=154 # 替换为实际值
|
||||
|
||||
mysql -u root -p <<EOF
|
||||
STOP SLAVE;
|
||||
CHANGE MASTER TO
|
||||
MASTER_HOST='172.16.0.67',
|
||||
MASTER_USER='repl',
|
||||
MASTER_PASSWORD='Repl@123456',
|
||||
MASTER_LOG_FILE='$MASTER_LOG_FILE',
|
||||
MASTER_LOG_POS=$MASTER_LOG_POS;
|
||||
START SLAVE;
|
||||
SHOW SLAVE STATUS\G
|
||||
EOF
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 配置验证
|
||||
|
||||
### 1. 检查从库复制状态
|
||||
|
||||
```bash
|
||||
mysql -u root -p -e "SHOW SLAVE STATUS\G" | grep -E "Slave_IO_Running|Slave_SQL_Running|Seconds_Behind_Master|Master_Host|Master_Log_File"
|
||||
```
|
||||
|
||||
**正常输出:**
|
||||
```
|
||||
Slave_IO_Running: Yes
|
||||
Slave_SQL_Running: Yes
|
||||
Seconds_Behind_Master: 0
|
||||
Master_Host: 172.16.0.67
|
||||
Master_Log_File: mysql-bin.000001
|
||||
```
|
||||
|
||||
### 2. 测试数据同步
|
||||
|
||||
```bash
|
||||
# 在主库插入测试数据
|
||||
mysql -u root -p hzdyjs_xg -e "CREATE TABLE IF NOT EXISTS test_replication (id INT PRIMARY KEY, name VARCHAR(50));"
|
||||
mysql -u root -p hzdyjs_xg -e "INSERT INTO test_replication VALUES (1, 'test');"
|
||||
|
||||
# 等待1秒
|
||||
sleep 1
|
||||
|
||||
# 在从库查询测试数据
|
||||
mysql -u root -p hzdyjs_xg -e "SELECT * FROM test_replication;"
|
||||
|
||||
# 如果能看到数据,说明主从复制正常
|
||||
# 清理测试数据
|
||||
mysql -u root -p hzdyjs_xg -e "DROP TABLE test_replication;"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 配置说明
|
||||
|
||||
### 主库配置参数说明
|
||||
|
||||
- **`server-id = 1`**: 主库唯一标识,必须与从库不同
|
||||
- **`log-bin = mysql-bin`**: 开启binlog,文件名前缀为mysql-bin
|
||||
- **`binlog-format = ROW`**: 使用ROW格式,数据一致性最好
|
||||
- **`binlog-do-db = hzdyjs_xg`**: 只记录hzdyjs_xg数据库的binlog
|
||||
- **`sync_binlog = 0`**: 性能优先,不强制同步binlog到磁盘(性能影响约1-2%)
|
||||
- **`expire_logs_days = 7`**: binlog保留7天
|
||||
|
||||
### 从库配置参数说明
|
||||
|
||||
- **`server-id = 2`**: 从库唯一标识,必须与主库不同
|
||||
- **`relay-log = mysql-relay-bin`**: relay log文件名
|
||||
- **`read-only = 1`**: 从库只读,防止误操作
|
||||
- **`replicate-do-db = hzdyjs_xg`**: 只复制hzdyjs_xg数据库
|
||||
|
||||
---
|
||||
|
||||
## 🔍 常见问题排查
|
||||
|
||||
### 问题1:从库IO线程未运行
|
||||
|
||||
```bash
|
||||
# 检查网络连通性
|
||||
ping 172.16.0.67
|
||||
telnet 172.16.0.67 3306
|
||||
|
||||
# 检查复制用户
|
||||
mysql -u root -p -e "SELECT user, host FROM mysql.user WHERE user='repl';"
|
||||
|
||||
# 查看详细错误
|
||||
mysql -u root -p -e "SHOW SLAVE STATUS\G" | grep -i "last_io_error"
|
||||
```
|
||||
|
||||
### 问题2:从库SQL线程未运行
|
||||
|
||||
```bash
|
||||
# 查看具体错误
|
||||
mysql -u root -p -e "SHOW SLAVE STATUS\G" | grep -i "last_sql_error"
|
||||
|
||||
# 检查从库是否可写
|
||||
mysql -u root -p -e "SHOW VARIABLES LIKE 'read_only';"
|
||||
```
|
||||
|
||||
### 问题3:配置文件语法错误
|
||||
|
||||
```bash
|
||||
# 检查配置文件语法
|
||||
mysqld --help --verbose | head -1
|
||||
|
||||
# 查看MySQL错误日志
|
||||
tail -f /iflytek/mysql/log/mysqld.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 相关文档
|
||||
|
||||
- [快速配置主从复制.md](./快速配置主从复制.md) - 3步快速配置指南
|
||||
- [MySQL主从复制配置步骤.md](./MySQL主从复制配置步骤.md) - 完整配置步骤和故障排查
|
||||
- [部署脚本/setup-mysql-replication.sh](./部署脚本/setup-mysql-replication.sh) - 自动化配置脚本
|
||||
|
||||
---
|
||||
|
||||
**📝 文档版本**: v1.0
|
||||
**🔄 最后更新**: 2025-01-27
|
||||
**✅ 适用场景**: 数据已一致的67/68机器主从复制配置
|
||||
|
||||
Reference in new issue
Block a user