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/data2)定义主服务器配置文件
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=mixed3)创建并启动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=10626)创建并运行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.77)在从服务器上配置连接主服务器的信息
首先主服务器上查看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