Mysql主从复制

介绍

MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。

MySQL复制过程分成三步:
● master将改变记录到二进制日志(binary log)
● slave将master的binary log拷贝到它的中继日志(relay log)
● slave重做中继日志中的事件,将改变应用到自己的数据库中

何进行主从复制

首先要确保防火墙开放mysql的端口(3306或其他)

复制代码
# 检查防火墙
sudo firewall-cmd --list-ports
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

首先要准备两个服务器,一个用来管理主库(master);一个用来管理从库(slave)

1. 主服务器配置

修改主服务器配置文件(my.cnf):

mysqld

服务器ID,主从不能相同

server-id = 1

开启二进制日志

log_bin = mysql-bin

需要复制的数据库(可选)

binlog-do-db = test_db

不需要复制的数据库(可选)

binlog-ignore-db = mysql

binlog-ignore-db = information_schema

二进制日志格式(推荐ROW)

binlog_format = ROW

自动清理过期日志

expire_logs_days = 7

之后执行sql

-- 在主服务器执行

CREATE USER 'repl'@'192.168.1.11' IDENTIFIED BY 'repl_password';

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.11';

FLUSH PRIVILEGES;

解释:

'repl' - 用户名,专门用于复制的用户,可以自定义

'@'192.168.1.11' - 指定允许连接的客户端IP,这里是从服务器的IP

'repl_password' - 用户密码,建议设置强密码

查看主服务器状态:

执行sql

SHOW MASTER STATUS;

记录下返回的 File 和 Position 值,从服务器配置时需要。

2. 从服务器配置

修改从服务器配置文件(my.cnf):

mysqld

server-id = 2#id要于主库不相同

开启中继日志

relay_log = mysql-relay-bin

可选:记录从服务器的二进制日志

log_bin = mysql-bin

防止从服务器写操作

read_only = 1

之后执行sql

-- 在从服务器执行

CHANGE MASTER TO

MASTER_HOST='192.168.1.10',

MASTER_USER='repl',

MASTER_PASSWORD='repl_password',

MASTER_LOG_FILE='mysql-bin.000001', -- 主服务器SHOW MASTER STATUS的File

MASTER_LOG_POS=107; -- 主服务器SHOW MASTER STATUS的Position

-- 启动复制

START SLAVE;

3. 验证复制状态

检查从服务器复制状态:

SHOW SLAVE STATUS\G;

满足:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

使用Mysql主从复制-------------Sharding-JDBC

主Mysql从从复制成功后在Java工程中用Sharding-JDBC来使用它。

Sharding-JDBC介绍

Sharding-JDBC定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。使用Sharding-JDBC可以在程序中轻松的实现数据库读写分离。

● 适用于任何基于JDBC的ORM框架,如:JPA,Hibernate,Mybatis,Spring JDBC Template或直接使用JDBC。

● 支持任何第三方的数据库连接池,如:DBCP,C3P0,BoneCP,Druid,HikariCP等。

● 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。

使用步骤
1 导入 maven 坐标( Sharding-JDBC 的)

<dependency>

<groupId>org.apache.shardingsphere</groupId>

<artifactId>sharding-jdbc-spring-boot-starter</artifactId>

<version>4.0.0-RC1</version>

</dependency>

2在配置文件中配置读写分离规则

3在配置文件中允许bean定义覆盖配置顶

spring:

shardingsphere:

datasource:

names:

master,slave

主数据源

master:

type: com.alibaba.druid.pool.DruidDataSource

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://192.168.217.100:3307/rw?characterEncoding=utf-8

username: root

password: abc123LQ

从数据源

slave:

type: com.alibaba.druid.pool.DruidDataSource

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://192.168.217.130:3307/rw?characterEncoding=utf-8

username: root

password: abc123LQ

masterslave:

读写分离配置

load-balance-algorithm-type: round_robin #轮询(按顺序来用从库,轮着使用)

最终的数据源名称

name: dataSource

主库数据源名称

master-data-source-name: master

从库数据源名称列表,多个逗号分隔

slave-data-source-names: slave

props:

sql:

show: true #开启SQL显示,默认false

#允许覆盖

main:

allow-bean-definition-overriding: true

相关推荐
AllData公司负责人4 小时前
数据库同步平台|AIIData数据中台实现OceanBase、达梦数据库、OpenGauss、人大金仓、Hive、TDengine 一键接入Doris
大数据·数据库·hive·mysql·oceanbase·tdengine
2603_954708314 小时前
全维度容错设计,打造微电网安全运行屏障
服务器·网络·数据库·人工智能·分布式·安全
IvorySQL5 小时前
从双解析器到循环工程:IvorySQL 五年技术演进路线的深度观察
大数据·数据库·人工智能·postgresql·开源
wefg15 小时前
【MySQL】事务
数据库·mysql
黑白极客5 小时前
mysql的高可用性
数据库·mysql
一十九的酒5 小时前
Oracle 12c 标准版无缝升级企业版实战记录
数据库·oracle·标准版切换到企业版
ZhengEnCi6 小时前
S02-SpringBoot实体类新增字段对已有数据的影响及自动DDL同步机制详解
数据库·spring boot
妙码生花6 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(三十二):增加 admin_rule 模型及数据表迁移
数据库·go·ai编程
千维百策6667 小时前
SRE 中如何消除琐务:提升工程效率与服务可靠性的实践方法
数据库
卓怡学长7 小时前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea