高可用集群篇(三) -- MySQL主从复制 & ShardingSphere读写分离分库分表
1. 什么是MySQL主从复制?
MySQL主从复制是指将一个MySQL数据库服务器作为主服务器,其他MySQL服务器作为从服务器,通过将主服务器上的数据变更同步到从服务器上,实现数据的复制和同步的过程。主从复制的实现方式主要有两种:基于binlog的复制和基于GTID的复制。
基于binlog的复制是通过将主服务器上的数据变更记录保存在binlog日志文件中,然后从服务器通过读取主服务器的binlog日志文件,将数据变更同步到从服务器上。
基于GTID的复制是通过全局事务标识符(Global Transaction Identifier,GTID)来实现主从复制。GTID是一个唯一的标识符,每个事务在主服务器上执行时都会被赋予一个唯一的GTID,从服务器通过读取主服务器的binlog日志文件,并识别其中的GTID,来进行数据变更的同步。
2. 如何搭建MySQL主从复制?
首先,需要在主服务器上开启二进制日志(binlog)功能,并设置一个唯一的server_id。
# 修改MySQL配置文件my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1
然后,在从服务器上设置一个唯一的server_id,并指定主服务器的IP地址和端口。
# 修改MySQL配置文件my.cnf
[mysqld]
server-id=2
replicate-do-db=test_db
接下来,需要在主服务器上创建一个用于复制的用户,并赋予复制权限。
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
然后,在从服务器上执行以下命令,指定主服务器的IP地址和端口,以及复制用户的用户名和密码。
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_PORT=3306,
MASTER_USER='repl_user',
MASTER_PASSWORD='password';
最后,启动从服务器的复制进程。
START SLAVE;
3. 什么是ShardingSphere读写分离分库分表?
ShardingSphere是一款开源的分布式数据库中间件,提供了读写分离、分库分表等功能,可以将数据分散存储在不同的数据库中,从而提高系统的可伸缩性和扩展性。
读写分离是指将读操作和写操作分别路由到不同的数据库实例上,通过提高读操作的并发性能,进而提升系统整体的性能。
分库分表是指将数据按照一定的规则分散存储在不同的数据库和表中,从而提高数据库的承载能力和并发性能。
4. 如何配置ShardingSphere读写分离分库分表?
首先,需要在配置文件中配置数据源和分库分表规则。
spring:
shardingsphere:
datasource:
names: ds0, ds1
ds0:
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/db0
username: root
password: root
ds1:
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/db1
username: root
password: root
sharding:
tables:
user:
actual-data-nodes: ds$->{0..1}.user_$->{0..1}
table-strategy:
inline:
sharding-column: id
algorithm-expression: user_$->{id % 2}
binding-tables:
- user
default-database-strategy:
hint:
algorithm-class-name: io.shardingsphere.api.algorithm.hint.HintShardingAlgorithm
default-table-strategy:
none:
然后,在代码中配置读写分离的数据源和分库分表的路由规则。
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() throws SQLException {
return ShardingSphereDataSourceFactory.createDataSource(createDataSourceMap(), createShardingRuleConfiguration(), new Properties());
}
private Map<String, DataSource> createDataSourceMap() {
Map<String, DataSource> dataSourceMap = new HashMap
标签:主从复制,分库,user,MySQL,分表,服务器,操作步骤
From: https://blog.51cto.com/u_16175438/6660258