Mysql主从同步

1.主库配置

1.1主库(mysql-master171): ip(192.168.75.171) port(3306)

1.1.1设置server-id值并开启binlog参数

复制代码
[root@mysql-master171 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql   
socket=/data/mysql/mysql.sock  
server_id=171
log-bin=binlog

1.1.2重启数据库

bash 复制代码
[root@mysql-master171 ~]# /etc/init.d/mysqld restart
Shutting down MySQL. SUCCESS!
Starting MySQL. SUCCESS!

1.1.3查看数据库的编号

bash 复制代码
[root@mysql-master171 ~]# mysql -uroot -p123 -e 'select @@server_id;'
mysql: [Warning] Using a password on the command line interface can be insecure.
+-------------+
| @@server_id |
+-------------+
|         171 |
+-------------+

1.1.4建立同步账号

bash 复制代码
[root@mysql-master171~]# mysql -uroot -p123
mysql> create user 'rep'@'%' identified  by 'rep123';
mysql> grant  replication slave on *.* to 'rep'@'%';
#查看权限
mysql>  show grants for 'rep'@'%';
+---------------------------------------------+
| Grants for rep@%                            |
+---------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO `rep`@`%` |
+---------------------------------------------+

1.1.5锁表只读

bash 复制代码
#为后面备份准备,注意生产环境要提前申请停机时间;
mysql> flush tables with read lock;
#提示:如果超过设置时间不操作会自动解锁。
mysql> show variables like '%timeout%';
#测试锁表后是否可以创建数据库:
mysql> create database test;
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock

1.1.6查看主库状态

bash 复制代码
#查看主库状态,即当前日志文件名和二进制日志偏移量
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000006 |     324 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
#注意:如果想要重置主库,可以使用reset master;生产环境慎用

1.1.7备份主数据库中数据

bash 复制代码
[root@mysql-master171 ~]# mysqldump -uroot -p123  --all-databases> /backup/mysql_bak.2025-09-03.sql.gz 

1.1.8解锁

bash 复制代码
mysql> unlock tables;

1.1.9主库备份数据上传到从库

bash 复制代码
[root@mysql-master171 ~]# scp  /backup/mysql_bak.2025-09-03.sql.gz 192.168.75.172:/backup

2.从库配置

2.1从库(mysql-master172):ip(192.168.75.172)port(3306)

2.1.1设置server-id值

bash 复制代码
[root@mysql-master172 ~]# vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
server_id=172

2.1.2重启数据库

bash 复制代码
[root@mysql-master172 ~]# /etc/init.d/mysqld restart

2.1.2还原从主库备份数据

bash 复制代码
[root@mysql-mster172 ~]# cd /backup/
[root@mysql-mster172 ~]# gzip  -d mysql_bak.2025-09-03.sql.gz
[root@mysql-mster172 ~]# mysql -uroot -p < mysql_bak.2025-09-03.sql.gz
#检查还原:
[root@mysql-mster172 ~]# mysql -uroot -p -e 'show databases;'

2.1.3设定从库向主库同步

bash 复制代码
mysql> CHANGE REPLICATION SOURCE TO
SOURCE_HOST='192.168.75.171',
SOURCE_USER='rep',
SOURCE_PASSWORD='rep123',
SOURCE_LOG_FILE='binlog.000006',
SOURCE_LOG_POS=324,
SOURCE_SSL=1; 

2.1.4启动从库同步开关

bash 复制代码
mysql> start replica;

2.1.5检查状态

bash 复制代码
mysql> show replica status\G
Slave_IO_Running: Yes    #IO线程是否打开
Slave_SQL_Running: Yes   #SQL线程是否打开

3.MySQL主从复制的状况监测

3.1主库创建一个数据库,从库查看

主库

bash 复制代码
mysql> create database haha;
Query OK, 1 row affected (0.01 sec)

从库

bash 复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| haha               |
| information_schema |
| jeams              |
| mysql              |
| performance_schema |
| relay              |
| sys                |
+--------------------+
7 rows in set (0.00 sec)

4.生产环境其他常用设置

4.1配置不记录information_schema mysql test 等数据库的操作(增,删,改)的二进制日志文件

4.1.1在主配置文件中添加配置

bash 复制代码
binlog_ignore_db="information_schema"
binlog_ignore_db="mysql"
binlog_ignore_db="test"

4.1.2重启数据库

bash 复制代码
[root@mysql-master171 ~]# /etc/init.d/mysqld  restart
[root@mysql-master171 ~]# mysql -uroot -p -e 'show master status\G'
Enter password:
*************************** 1. row ***************************
             File: binlog.000004
         Position: 157
     Binlog_Do_DB:
 Binlog_Ignore_DB: information_schema,mysql,test
Executed_Gtid_Set:

4.2从库开始备份binlog

bash 复制代码
log-slave-updates  #当从库为其它从库的主库时必须要添加该参数
log_bin = mysql-bin  #设置二进制日志文件的文件前缀为mysql-bin
expire_logs_days = 7  #设置二进制日志文件的保留时间
应用场景:级联复制或从库做数据备份

4.3从库只读

bash 复制代码
read-only
innodb_read_only = ON或1
注:当用户权限中没有SUPER权限(ALL权限是包括SUPER的)时,从库的read-only生效!
相关推荐
小草cys1 天前
鲲鹏920服务器安装openEuler后无法联网,但物理网线已连接
运维·服务器·openeuler
Volunteer Technology1 天前
FastDFS+Nginx
运维·nginx
野犬寒鸦1 天前
从零起步学习并发编程 || 第五章:悲观锁与乐观锁的思想与实现及实战应用与问题
java·服务器·数据库·学习·语言模型
李小白202002021 天前
EMMC写入/烧录逻辑
linux·运维·服务器
VX:Fegn08951 天前
计算机毕业设计|基于springboot + vue云租车平台系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
楼兰胡杨1 天前
浅析二叉树、B树、B+树和MySQL索引底层原理
mysql·数据结构与算法分析
Elastic 中国社区官方博客1 天前
跳过 MLOps:通过 Cloud Connect 使用 EIS 为自管理 Elasticsearch 提供托管云推理
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
dishugj1 天前
【oracle】RAC开启归档步骤
数据库
IndulgeCui1 天前
KingbaseES 数据库与用户默认表空间深度解析与实战分享
数据库
予枫的编程笔记1 天前
【Linux入门篇】Linux入门不踩坑:内核、发行版解析+环境搭建全流程
linux·ubuntu·centos·vmware·xshell·linux入门·linux环境搭建