Sharding-Jdbc 实现读写分离 + 分库分表,写得太好了!

1、实现概览

ShardingSphere-Jdbc定位为轻量级Java框架,读写在Java的分离分库分表Jdbc层提供的额外服务。它使用客户端直连数据库,太好以jar包形式提供服务,实现可理解为增强版的读写Jdbc驱动,完全兼容Jdbc和各种ORM框架

2、分离分库分表MySQL主从复制

1)、太好docker配置mysql主从复制

1)创建主服务器所需目录 

mkdir -p /usr/local/mysqlData/master/cnf  mkdir -p /usr/local/mysqlData/master/data 

2)定义主服务器配置文件 

vim /usr/local/mysqlData/master/cnf/mysql.cnf  [mysqld]  ## 设置server_id,实现注意要唯一  server-id=1  ## 开启binlog  log-bin=mysql-bin  ## binlog缓存  binlog_cache_size=1M  ## binlog格式(mixed、statement、服务器租用读写row,分离分库分表默认格式是statement)  binlog_format=mixed 

3)创建并启动mysql主服务

docker run -itd -p 3306:3306 --name master -v /usr/local/mysqlData/master/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

4)添加复制master数据的用户reader,供从服务器使用 

[root@aliyun /]# docker ps  CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES  6af1df686fff        mysql:5.7           "docker-entrypoint..."   5 seconds ago       Up 4 seconds        0.0.0.0:3306->3306/tcp,太好 33060/tcp   master  [root@aliyun /]# docker exec -it master /bin/bash  root@41d795785db1:/# mysql -u root -p123456  mysql> GRANT REPLICATION SLAVE ON *.* to reader@% identified by reader;  Query OK, 0 rows affected, 1 warning (0.00 sec)  mysql> FLUSH PRIVILEGES;  Query OK, 0 rows affected (0.00 sec) 

5)创建从服务器所需目录,编辑配置文件 

mkdir /usr/local/mysqlData/slave/cnf -p  mkdir /usr/local/mysqlData/slave/cnf -p  vim /usr/local/mysqlData/slave/cnf/mysql.cnf  [mysqld]  ## 设置server_id,实现注意要唯一  server-id=2  ## 开启binlog,以备Slave作为其它Slave的Master时使用  log-bin=mysql-slave-bin ## relay_log配置中继日志  relay_log=edu-mysql-relay-bin  ## 如果需要同步函数或者存储过程  log_bin_trust_function_creators=true  ## binlog缓存  binlog_cache_size=1M  ## binlog格式(mixed、statement、读写row,分离分库分表默认格式是statement)  binlog_format=mixed  ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断  ## 如:1062错误是指一些主键重复,1032错误是亿华云计算因为主从数据库数据不一致  slave_skip_errors=1062 

6)创建并运行mysql从服务器 

docker run -itd -p 3307:3306 --name slaver -v /usr/local/mysqlData/slave/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 

7)在从服务器上配置连接主服务器的信息

首先主服务器上查看master_log_file、master_log_pos两个参数,然后切换到从服务器上进行主服务器的连接信息的设置。

另外,MySQL 系列面试题和答案全部整理好了,微信搜索Java技术栈,在后台发送:面试,可以在线阅读。

主服务上执行: 

root@6af1df686fff:/# mysql -u root -p123456  mysql> show master status;  +------------------+----------+--------------+------------------+-------------------+  | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |  +------------------+----------+--------------+------------------+-------------------+  | mysql-bin.000003 |      591 |              |                  |                   |  +------------------+----------+--------------+------------------+-------------------+  1 row in set (0.00 sec) 

docker查看主服务器容器的站群服务器ip地 

[root@aliyun /]# docker inspect --format={ { .NetworkSettings.IPAddress}} master  172.17.0.2 

从服务器上执行: 

[root@aliyun /]# docker exec -it slaver /bin/bash  root@fe8b6fc2f1ca:/# mysql -u root -p123456   mysql> change master to master_host=172.17.0.2,master_user=reader,master_password=reader,master_log_file=mysql-bin.000003,master_log_pos=591; 

8)从服务器启动I/O 线程和SQL线程 

mysql> start slave;  Query OK, 0 rows affected, 1 warning (0.00 sec)  mysql> show slave status\G 
系统运维
上一篇:戴尔现代数据保护解决方案 简单且经济高效的保护企业数据
下一篇:数据中心脱碳如何抓住机遇?