Docker实现Mariadb分库分表及读写分离功能

  1. 准备工作

在开始分库分表及读写分离功能的实现前,需要完成以下准备工作:

  1. 安装和配置Docker
  2. 创建两个或以上的Mariadb容器
  3. 使用mydumper工具备份原始数据库中的表
  4. 在备份数据上运行分库分表工具
  5. 按照需要在不同的数据库中保存备份数据

  6. 实现分库分表功能

按照以下步骤实现分库分表功能:

  1. 创建用于存储分片的数据容器。可使用以下命令创建数据容器:

docker run -itd --name db_part1 -e MYSQL_ROOT_PASSWORD=123456 mariadb

  1. 在容器中启动mysql客户端,并创建用于存储分片数据的数据库,例如table_1:

docker exec -it db_part1 mysql -uroot -p123456 --execute="CREATE DATABASE table_1"

  1. 安装分库分表工具Pool,详见:https://github.com/crossoverJie/cim

  2. 在Pool的目录下执行以下命令,将配置文件config.yml复制到类似db_sample的文件夹中,并在其中添加分片数据的配置:

cp config/config.yml db_sample/

  1. 修改db_sample文件夹中的config.yml文件,添加分片数据的配置。例如:

yml
dataSource:
names: ds_0,ds_1
ds_0:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/table_1?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
ds_1:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/table_2?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
rule:
#分片策略
ds0:
dataSourceNames: ds_0,ds_1
algorithmClassName: com.alibaba.druid.pool.ha.HighAvailableLoadBalanceAlgorithm
ds1:
dataSourceNames: ds_0,ds_1
algorithmClassName: com.alibaba.druid.pool.ha.HighAvailableLoadBalanceAlgorithm
loadBalancer:
name: roundRobin
configMap:
ds_0: 50
ds_1: 50

在上述配置中,使用了两个数据库表,分别为table_1和table_2。

  1. 运行Pool,启动分片服务:

java -jar pool.jar db_sample/config.yml

  1. 通过mysql客户端连接分片服务,测试分片是否配置成功:

docker run -it --rm mariadb mysql -hlocalhost -P8081 -uroot -p123456 table_1

连接成功后,可执行以下SQL语句进行测试:

CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

通过以上步骤,便可成功实现Mariadb分库分表的功能。

  1. 实现读写分离功能

按照以下步骤实现读写分离功能:

  1. 在Docker中创建两个Mariadb容器,用于存储主从复制数据。

  2. 在主库中,创建新用户并授予读写权限,例如:

CREATE USER 'replicator'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replicator'@'%';

  1. 在从库中,连接主库,进行数据复制。

CHANGE MASTER TO MASTER_HOST='主库IP地址',MASTER_USER='replicator',MASTER_PASSWORD='123456',MASTER_LOG_FILE='该文件第一条记录的File值',MASTER_LOG_POS=该文件第一条记录的Position值;
START SLAVE;

  1. 基于主从复制实现读写分离。在主库的cnf文件中添加读写分离的配置,例如:

```
[mysqld]
log_bin = mysql-bin
server-id = 1
binlog-format = row
transaction-isolation = READ-COMMITTED
binlog-do-db = test_db
bind-address = 0.0.0.0
skip-name-resolve
# 开启 GTID 之后必须配置如下三个参数
gtid_mode=ON
enforce_gtid_consistency=true
binlog_gtid_simple_recovery=ON
# 开启从库默认忽略错误以达到高可用的目的
slave-skip-errors=1062
read_only=ON
# 指定从库列表
relay-log-index= /data/mariadb2/data/relay-bin
relay-log = /data/mariadb2/data/relay-bin
slave-net-timeout=10
expire_logs_days = 30
max_binlog_size=100MB
# 配置用与读写分离的用户
[mysqld_multi]
mysqld1.cnf
mysqld2.cnf
[mysqld1]
server-id=1
datadir=/var/lib/msql
port=3306
log_bin =mysql-bin
binlog-format = row
log-slave-updates=ON
binlog_do_db=sbtest
bind-address=0.0.0.0
innodb_flush_log_at_trx_commit = 2
expire_logs_days=7
max_binlog_size=1000M
relay-log-index= /data/mariadb1/data/relay-bin
#relay_log_data_home_dir= /data/flashback/relat_log
relay_log = /data/mariadb1/data/relay-bin
read_only=1
skip-name-resolve
log-slave-updates
enforce-gtid-consistency
gtid-mode=on
report-host=mariadb_1
[mysqld2]
server-id=2
datadir=/var/lib/msql
port=3307
log_bin =mysql-bin
binlog-format = row
log-slave-updates=ON
binlog_do_db=sbtest
bind-address=0.0.0.0
innodb_flush_log_at_trx_commit = 2
expire_logs_days=7
max_binlog_size=1000M
relay-log-index= /data/mariadb2/data/relay-bin
#relay_log_data_home_dir= /data/flashback/relat_log
relay_log = /data/mariadb2/data/relay-bin
skip-name-resolve
log-slave-updates
enforce-gtid-consistency
gtid-mode=on
report-host=mariadb_2
read_only=1

[client]
user=root
socket=/var/run/mysqld/mysqld.sock

[mysql]
no-auto-rehash
```

  1. 开启Mariadb服务,并使用新增的用户进行读写分离的测试,例如:

docker exec -it db_master mysql -ureplicator -p123456 -e "use test_db; insert into test values(2019, 'good')"

通过以上步骤,便可成功实现Mariadb的分库分表以及读写分离的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker实现Mariadb分库分表及读写分离功能 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • MySQL limit分页大偏移量慢的原因及优化方案

    MySQL的LIMIT语句在分页查询时非常常见,我们可以使用LIMIT语句来返回一个数据集的子集。但是,当我们使用大偏移量的LIMIT语句时,查询性能会明显下降,导致慢查询,这是因为数据集太大,需要进行大量的查询才能得到结果。下面,我们将讨论原因,并提供一些优化方案。 1. 问题原因 当我们使用大偏移量的LIMIT语句时,如LIMIT 5000000, 10…

    database 2023年5月19日
    00
  • Ruby使用Mysql2连接操作MySQL

    下面是关于Ruby使用Mysql2连接操作MySQL的完整攻略。 安装Mysql2 在使用Mysql2连接操作MySQL之前,需要先安装Mysql2。可以通过以下命令在终端中安装: gem install mysql2 连接MySQL 连接MySQL需要指定需要连接的MySQL的主机地址、用户名、密码和需要连接的数据库,可以通过以下方式实现: require…

    database 2023年5月21日
    00
  • Sql查询MySql数据库中的表名和描述表中字段(列)信息

    从Mysql5.0开始,可以用information_schema这个系统库来查询数据库信息。该系统库存储了mysql服务器的元数据信息,包括它自身的信息、数据库信息、表信息、字段信息等。通过在该库下查询相应的表,可以获取到所需的表名、字段名等信息。 查询数据库中所有表名 要查询数据库中所有表名,我们可以使用information_schema库中的tabl…

    database 2023年5月21日
    00
  • MySQL按时间统计数据的方法总结

    MySQL按时间统计数据的方法总结 MySQL是一个常用的关系型数据库管理系统,常常需要按时间进行统计数据。本文总结了常见的按时间统计数据的方法。 方法一:使用DATE_FORMAT函数 SELECT DATE_FORMAT(created_at, ‘%Y-%m-%d’) AS day, COUNT(*) AS count FROM table GROUP …

    database 2023年5月22日
    00
  • mysql 触发器语法与应用示例

    下面是一份关于“mysql 触发器语法与应用示例”的攻略: 什么是mysql触发器 MySQL触发器是一种特殊的存储过程,当特定的事件(如对一张表进行的 INSERT、UPDATE 和 DELETE 等操作)发生时,MySQL触发器会自动执行一个已经定义好的SQL语句集,因此它可以在数据库发生某些操作时进行响应并执行指定的操作。 触发器语法 其基本语法如下:…

    database 2023年5月22日
    00
  • Redis系列12:Redis 的事务机制

    Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型追求性能极致:客户端缓存带来的革命Redis系列8:Bitmap实现亿万级数据计算Redis…

    2023年4月10日
    00
  • SQL SERVER 触发器介绍

    下面是“SQL SERVER 触发器介绍”的完整攻略。 一、什么是SQL SERVER触发器 SQL SERVER 触发器是SQL SERVER数据库对象的一种类型,触发器与存储过程一样都是SQL语句的集合,触发器是由SQL SERVER对一种事件(INSERT、UPDATE、DELETE)进行处理后自动执行的代码块。 SQL SERVER触发器主要由触发器…

    database 2023年5月21日
    00
  • Navicat远程连接SQL Server并转换成MySQL步骤详解

    让我详细讲解一下“Navicat远程连接SQL Server并转换成MySQL步骤详解”的完整攻略。 概述 Navicat是一种著名的数据库管理工具,可用于多种数据库,包括MySQL、SQL Server、Oracle等。本攻略将逐步讲解如何使用Navicat远程连接SQL Server数据库并将其转换为MySQL数据库。 步骤 步骤1:安装Navicat …

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部