Linux 数据库 Mysql8 主从复制

Linux下 MySQL 主从复制

复制原理:

  1. Mysql 中有一种日志叫做 bin 日志(二进制日志)。这个日志会记录下所有修改了数据库的SQL
    语句(insert,update,delete,create/alter/drop table, grant 等等)。
  2. 主从复制的原理其实就是把主服务器上的 bin 日志复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。
  3. 主节点必须启用二进制日志,记录任何修改了数据库数据的事件。

复制流程图:

  • 注意:主从服务器的防火墙都要给mysql端口添加例外。也就是说两台服务器的mysql数据库可以互连。

主库

powershell 复制代码
# 修改配置
vi /etc/my.cnf
# 或
vim /etc/my.cnf

配置文件 my.cnf 内容 修改完最好重启一下数据库

powershell 复制代码
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[client]
port=3306
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'

lower_case_table_names=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
 
skip-external-locking
skip_name_resolve
max_connect_errors=10
 
slow_query_log=on
long_query_time=3
 
key_buffer_size=128M
read_buffer_size=1M
read_rnd_buffer_size=2M
table_open_cache=64
sort_buffer_size=512K
net_buffer_length=8K
 
default_storage_engine=InnoDB
innodb_buffer_pool_size=1024M
innodb_flush_log_at_trx_commit=2
innodb_redo_log_capacity=256M
innodb_log_buffer_size=8M
innodb_redo_log_capacity=8388608
innodb_lock_wait_timeout=50

#-----上面是数据库基本配置可以---下面这个是主要的

#修改名称log-bin=mysql.bin
# Server Id.(可是设置自己ip 这里是 1)
server-id=1
log-bin=mysql-bin
# 需要同步的数据库(替换自己的数据库 这里用的 demo)
binlog-do-db=demo
# 使binlog在每N次binlog写入后与硬盘同步
sync-binlog=1

# 1天时间自动清理二进制日志
binlog_expire_logs_seconds=86400

# 不需要同步的数据库
binlog-ignore-db = mysql                                  
binlog-ignore-db = information_schema
binlog-ignore-db = sys
binlog-ignore-db = test
# Error Logging.

从库

powershell 复制代码
# 修改配置
vi /etc/my.cnf
# 或
vim /etc/my.cnf

配置文件 my.cnf 内容 修改完最好重启一下数据库

powershell 复制代码
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[client]
port=3306
socket=/var/lib/mysql/mysql.sock
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'

lower_case_table_names=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
 
skip-external-locking
skip_name_resolve
max_connect_errors=10
 
slow_query_log=on
long_query_time=3
 
key_buffer_size=128M
read_buffer_size=1M
read_rnd_buffer_size=2M
table_open_cache=64
sort_buffer_size=512K
net_buffer_length=8K
 
default_storage_engine=InnoDB
innodb_buffer_pool_size=1024M
innodb_flush_log_at_trx_commit=2
innodb_redo_log_capacity=256M
innodb_log_buffer_size=8M
innodb_redo_log_capacity=8388608
innodb_lock_wait_timeout=50

#-----上面是数据库基本配置可以---下面这个是主要的

# 主库和从库的Server Id不能相同
# Server Id.
server-id=2

# bind-address=192.168.1.2
relay_log = relay-bin
read_only = 1

# 二进制日志自动删除的天数
binlog_expire_logs_seconds=86400

主库创建授权用户

powershell 复制代码
# 登录 数据库
mysql -u root -p
# 创建用户--指定 IP 连接(从库IP 192.168.1.2)
CREATE USER '用户'@'IP' IDENTIFIED BY '密码';
# 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO '用户'@'IP';
# 授予最高权限(不推荐)
GRANT ALL PRIVILEGES ON *.* TO '用户'@'IP' WITH GRANT OPTION;
# 刷新权限
FLUSH PRIVILEGES;
# 获取状态信息(主从连接会用到)
SHOW MASTER STATUS \G;

从库与主库建立联系

slave 与 master 建立连接,进行数据同步 master_host 主机ip; master_user 账号;master_password 密码;master_log_file、master_log_pos 都是在主机获取的

powershell 复制代码
CHANGE MASTER TO MASTER_HOST='192.168.1.1',MASTER_USER='用户',MASTER_PASSWORD='密码',MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=876;

获取状态信息

powershell 复制代码
# 获取状态信息
SHOW SLAVE STATUS \G;

配置成功

相关命令

数据库的

powershell 复制代码
# 启动数据库
systemctl start mysqld
# 查看数据库状态
systemctl status mysqld
# 停止数据库
systemctl stop mysqld
# 重启数据库
systemctl restart mysqld

复制进程

powershell 复制代码
# 停止复制进程
STOP SLAVE;
# 启动复制
START SLAVE;
# 重置复制状态,保留配置
RESET SLAVE;
# 完全清除复制配置
RESET SLAVE ALL;

防火墙

powershell 复制代码
# 启动防火墙
systemctl start firewalld
# 查看防火墙状态
systemctl status firewalld
# 停止防火墙
systemctl stop firewalld

MySQL同步故障:" Slave_SQL_Running:No" 自己的解决方法

方法一:

powershell 复制代码
# 查看错误信息
SHOW SLAVE STATUS \G;
# 停止复制进程
STOP SLAVE;
# 跳过事件
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
# 启动复制
START SLAVE; 
# 查看信息
SHOW SLAVE STATUS \G;

方法二:

MASTER_LOG_FILE 与 MASTER_LOG_POS 需要重新去主库 获取 配置自己的

powershell 复制代码
# 查看错误信息
SHOW SLAVE STATUS \G;
# 停止复制进程
STOP SLAVE;
# 重新在配置一下 从库与主库建立联系
CHANGE MASTER TO MASTER_HOST='192.168.1.1',MASTER_USER='用户',MASTER_PASSWORD='密码',MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=876;
# 启动复制
START SLAVE; 
# 查看信息
SHOW SLAVE STATUS \G;
相关推荐
xiaogai_gai3 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
注塑机数据采集联网3 小时前
注塑机数据采集网关对接MES系统数字化技术方案
大数据·网络·数据库·物联网·数据挖掘·数据分析
Fcy6483 小时前
Linux下 多路转接select详解
linux·select·多路转接
像风一样自由20203 小时前
56.实战PostgreSQL-pgvector-FastAPI构建轻量级RAG
数据库·人工智能·postgresql·大模型·fastapi·智能体
云飞云共享云桌面4 小时前
设计师共享单台图形服务器,解决 SolidWorks大装配卡顿难题
运维·服务器·3d·自动化·电脑·制造
无足鸟ICT4 小时前
【RHCA+】RPM包命名规则
linux·运维·服务器
User_芊芊君子4 小时前
KFS异构同步_260条链路DDL自动转换解析
数据库·ai·大模型
xiancai_xianyu4 小时前
Text2SQL落地生产库前,SQL要过哪三道闸
前端·数据库·sql·sql注入·text2sql·ai agent开发·企业级ai框架
迪康Defender4 小时前
终端安全运维:浅谈迪康端点安全一体化管理系统工具箱实用能力
运维·安全·信息可视化·自动化·运维开发·学习方法·远程工作
cc5725026534 小时前
2027校招准备:数据科学与大数据技术专业转产品数据运营,PRD与SQL怎么安排?
大数据·sql·墨刀