在配置MySQL主从复制时,用户可能会疑惑:系统自带的数据库(information_schema、mysql、performance_schema、sys)是否需要和主库一模一样?
系统数据库不需要复制,每个MySQL实例的系统数据库都是独立管理的。
-- 查看所有数据库
SELECT * FROM information_schema.SCHEMATA;
-- 查看表信息
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'hzdyjs_xg';
user、db、tables_priv等系统表repl用户需要在主库创建,从库不需要(从库只读)root等系统用户每个实例独立管理-- 在主库创建业务数据库用户(如果需要从库也能访问)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'password';
GRANT SELECT ON hzdyjs_xg.* TO 'app_user'@'%';
-- 在从库手动创建相同用户(如果需要)
-- 注意:主从复制不会自动复制用户创建语句(因为只复制业务数据库)
binlog-do-db = hzdyjs_xg,只复制业务数据库mysql数据库的用户和权限不会自动复制-- 查看性能监控数据
SELECT * FROM performance_schema.events_statements_summary_by_digest
ORDER BY sum_timer_wait DESC LIMIT 10;
performance_schema和information_schema的视图-- 查看慢查询
SELECT * FROM sys.statement_analysis ORDER BY avg_timer_wait DESC LIMIT 10;
-- 查看表IO统计
SELECT * FROM sys.io_global_by_file_by_bytes LIMIT 10;
# 主库配置(/etc/my.cnf)
[mysqld]
binlog-do-db = hzdyjs_xg # 只记录业务数据库的binlog
# 从库配置(/etc/my.cnf)
[mysqld]
replicate-do-db = hzdyjs_xg # 只复制业务数据库
binlog-do-db = hzdyjs_xg:主库只记录业务数据库的binlog,系统数据库的变更不会记录replicate-do-db = hzdyjs_xg:从库只复制业务数据库,系统数据库不会被复制# ✅ 正确做法:只备份业务数据库
mysqldump -u root -p hzdyjs_xg > backup.sql
# ❌ 错误做法:不要备份系统数据库
# mysqldump -u root -p --all-databases > backup.sql # 不推荐
-- 从库只需要复制用户(repl),业务用户不需要
-- 从库设置为只读,业务应用不直接连接从库
-- 在主库创建用户
CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'password';
GRANT SELECT ON hzdyjs_xg.* TO 'readonly_user'@'%';
-- 在从库手动创建相同用户
CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'password';
GRANT SELECT ON hzdyjs_xg.* TO 'readonly_user'@'%';
-- 在主库查看系统数据库
SHOW DATABASES;
-- 在从库查看系统数据库(应该和主库一样,但内容可能不同)
SHOW DATABASES;
-- 验证:系统数据库存在即可,内容不需要一致
-- information_schema、mysql、performance_schema、sys 都存在即可
| 数据库 | 是否需要复制 | 原因 | 处理方式 |
|---|---|---|---|
| information_schema | ❌ 不需要 | 自动生成,只读 | 自动管理 |
| mysql | ⚠️ 选择性 | 用户权限,但只复制业务数据库 | 手动创建需要的用户 |
| performance_schema | ❌ 不需要 | 实例独立,性能监控 | 自动管理 |
| sys | ❌ 不需要 | 基于其他系统数据库的视图 | 自动管理 |
| hzdyjs_xg | ✅ 必须复制 | 业务数据库 | 主从复制 |
hzdyjs_xg