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;
相关推荐
ShiLiu_mtx1 分钟前
Keepalived,Haproxy负载均衡集群
linux·运维·负载均衡
l***91471 分钟前
【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库
数据库·mysql·数据库开发
幸福右手牵2 分钟前
服务器 IP 地址配置方案
linux·服务器·tcp/ip·智能路由器
Hello.Reader2 分钟前
Flink SQL 中的 SELECT & WHERE,批流统一的查询入口
sql·flink·linq
Wang's Blog3 分钟前
MongoDB小课堂:精通数据迁移工具 mongoexport 与 mongoimport 的终极指南
数据库·mongodb
vortex53 分钟前
Ubuntu 虚拟机配置静态 IP
linux·tcp/ip·ubuntu
一 乐4 分钟前
旅游出行|基于Springboot+Vue的旅游出行管理系统设计与实现(源码+数据库+文档)
前端·数据库·vue.js·spring boot·后端·旅游
橘颂TA5 分钟前
【Linux】进程池
linux·运维·服务器·c++
p***32356 分钟前
Nginx 配置前端后端服务
运维·前端·nginx
草莓熊Lotso6 分钟前
Git 多人协作全流程实战:分支协同 + 冲突解决 + 跨分支协助
linux·运维·服务器·人工智能·经验分享·git·python