当前位置: 首页 > news >正文

MySQL-主从复制

MySQL-主从复制

  • 一、工作原理
  • 二、配置步骤
    • 1. 主库配置
    • 2. 从库配置
    • 3. 测试


一、工作原理

master:主服务器
slave:从服务器

  1. 首先在master上开启二进制日志
  2. master上数据发生变化,进行DML操作的时候,会产生二进制日志
  3. master上的dump线程会通知slave上的IO线程来拿二进制日志,IO线程拿到二进制日志后会写到slave上的中继日志,重演二进制日志里的操作,从而达到slave和master上的数据一模一样,实现数据的一致性

二、配置步骤

准备两台服务器

[root@master ~]# mysql --version
mysql Ver 8.0.43 for Linux on x86_64 (MySQL Community Server - GPL)

1. 主库配置

主服务器上开启二进制日志,server_id=1

[root@master ~]# tail -2 /etc/my.cnf
log_bin=/var/lib/mysql/mysql_bin.log
server_id=1# 从服务器上也可以开启二进制日志,server_id=2
[root@slave ~]# tail -2 /etc/my.cnf
log_bin=/var/lib/mysql/mysql_bin.log
server_id=2# 重启服务
systemctl restart mysqld

新建一个授权用户,给slave来复制二进制日志

MySQL 8.0 默认的 caching_sha2_password 认证插件在非 SSL 连接下要求 “安全连接”,而当前从库未配置 SSL,会导致认证失败
-> 兼容性方案:改用 mysql_native_password 插件

mysql> CREATE USER 'sc'@'192.168.168.%' IDENTIFIED WITH mysql_native_password BY 'passwd';
Query OK, 0 rows affected (0.02 sec)mysql> GRANT REPLICATION SLAVE ON *.* TO 'sc'@'192.168.168.%';
Query OK, 0 rows affected (0.00 sec)# 刷新权限
mysql> FLUSH PRIVILEGES;

查看是否开启二进制日志,主库状态

mysql> show variables like "log_bin";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql_bin.000001 |     1335 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

2. 从库配置

mysql> stop slave;# 同步两台服务器的基础数据[root@master ~]# mysqldump -uroot -p --all-databases >all_db.SQL
Enter password: 
[root@master ~]# scp all_db.SQL root@192.168.168.135:/root
all_db.SQL                                                                          100% 1256KB  63.5MB/s   00:00  [root@slave ~]# mysql -uroot -p <all_db.SQL 
Enter password: # 配置主库信息
mysql> CHANGE MASTER TO-> MASTER_HOST = '192.168.168.134',-> MASTER_USER = 'sc',-> MASTER_PASSWORD = 'passwd',-> MASTER_LOG_FILE = 'mysql_bin.000001',-> MASTER_LOG_POS = 1335;mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 192.168.168.134Master_User: scMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql_bin.000001Read_Master_Log_Pos: 1335Relay_Log_File: slave-relay-bin.000002Relay_Log_Pos: 785Relay_Master_Log_File: mysql_bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes# 若 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes,则表示主从复制配置成功

3. 测试

主上面操作

mysql> create table test1(age int);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into test1 values(10);
Query OK, 1 row affected (0.01 sec)

从上面查看

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test1          |
+----------------+mysql> select * from test1;
+------+
| age  |
+------+
|   10 |
+------+

slave是一直连接到master的,传输层使用tcp

[root@master ~]# netstat -anplut |grep ES
tcp        0      0 192.168.168.134:47374   192.168.168.135:22      ESTABLISHED 4595/ssh            
tcp        0     52 192.168.168.134:22      192.168.168.1:53773     ESTABLISHED 1380/sshd: root [pr 
tcp        0      0 192.168.168.134:22      192.168.168.1:53771     ESTABLISHED 1336/sshd: root [pr 
tcp6       0      0 192.168.168.134:3306    192.168.168.135:37154   ESTABLISHED 2600/mysqld         
udp        0      0 192.168.168.134:68      192.168.168.254:67      ESTABLISHED 760/NetworkManager  

查看主上所有活跃连接

mysql> show processlist;
+----+-----------------+-----------------------+------+-------------+------+-----------------------------------------------------------------+------------------+
| Id | User            | Host                  | db   | Command     | Time | State                                                           | Info             |
+----+-----------------+-----------------------+------+-------------+------+-----------------------------------------------------------------+------------------+
|  5 | event_scheduler | localhost             | NULL | Daemon      | 3491 | Waiting on empty queue                                          | NULL             |
|  8 | root            | localhost             | test | Query       |    0 | init                                                            | show processlist |
| 23 | sc              | 192.168.168.135:37154 | NULL | Binlog Dump |  312 | Source has sent all binlog to replica; waiting for more updates | NULL             |
+----+-----------------+-----------------------+------+-------------+------+-----------------------------------------------------------------+------------------+
http://www.dtcms.com/a/403757.html

相关文章:

  • 杭州 网站设计制作怎么把图片做超链接到网站
  • 深度学习与大脑的关系是“模拟-验证-超越”的迭代循环
  • 05 初始化
  • Python print()函数详解
  • 2025 PHP7/8 实战入门:15 天精通现代 Web 开发——第 5 课:数组与字符串处理
  • 网站底部放什么wordpress免费主题 开源
  • 时态--10--现在完成进⾏时
  • 新手建站网站内做动图
  • 超越工具链整合:价值流智能时代的企业级DevOps平台选型之道
  • LLMs之ThinkingModel:DeepSeek-V3.1的简介、安装和使用方法、案例应用之详细攻略
  • 数组(Java基础语法)
  • Linux驱动:操作步骤
  • 刚体转动欧拉方程:从理论到卫星姿态控制的实践
  • 网站开发总结800字ui网页设计报价
  • sward入门到实战(6) - 如何有效管理文档版本
  • 股票跟单网站开发建设网站怎么赚钱
  • 浦江县建设局网站地方房产网站APP如何做
  • 详解ElasticSearch2-进阶使用
  • C++面试突击(3)
  • 非法获取计算机信息系统数据罪:技术中立的边界与法律责任
  • 408cpp学习之链表(二)
  • 攻防世界-Web-Training-WWW-Robots
  • No015:如果DeepSeek与四维世界沟通——跨越维度的认知革命
  • JS逆向 - 盼之(ssxmod_itna、ssxmod_itna2)纯算 + 补环境
  • 复习两个与噪声有关的参数:SI-SDR和PESQ
  • apiSQL+GoView:一个API接口开发数据大屏
  • 关停网站的申请网站怎么营销
  • 湖南企业网站定制wordpress投递文章插件
  • Day07_苍穹外卖——缓存菜品与套餐购物车添加查看清空删除功能
  • 默会之墙:机器人教学困境中的认知迷雾与破晓之光