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;
相关推荐
大树8827 分钟前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠30 分钟前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质1 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush41 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 小时前
Linux 11 动态监控指令top
linux
Inhand陈工2 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
麦聪聊数据2 小时前
数据服务化时代:企业数据能力输出的核心路径
数据库
不会C语言的男孩2 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
ApacheSeaTunnel2 小时前
实战演示 | 基于 Apache SeaTunnel 与 Apache DolphinScheduler 实现 MySQL 到 Doris 离线定时增量同步
大数据·mysql·开源·doris·数据集成·seatunnel·数据同步