读写分离概述
-
双机热备功能,主数据库提供增删改操作,从数据库提供查操作。写数据操作比较耗时而读操作不耗时。很多情况下数据库更新少而查询多,因此可以配置多个从库查询缓解查询的压力
-
主从复制功能是mysql提供的(和shardingjdbc没有关系),从库可以监听主库的日志完成数据同步
-
shardingjdbc功能:
安装和启动mysql
首先运行以下命令拉去MySQL镜像
docker pull mysql:latest
运行mysql(由于要配置读写分离启动两个镜像)分别启动到3306和3307两个端口
docker run --name mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
docker run --name mysql02 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
此时需要配置服务器的安全组,另外需要配置可通过密码访问的ip,否则无法远程连接
docker exec -it mysql01 bash
登录mysql
mysql -uroot -p
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;
此步骤为root用户提供远程访问的权利
配置主从
修改mysql配置文件
进入mysql容器,进入配置文件目录
cd /etc/mysql
vim my.conf
如果vim没有安装则先安装vim
apt-get update vim
apt-get install vim
对主机添加如下配置:
[mysqld]
#开启日志
log‐bin = mysql‐bin
#设置服务id,主从不能一致
server‐id = 1
#设置需要同步的数据库
binlog‐do‐db=user_db
#屏蔽系统库同步
binlog‐ignore‐db=mysql
binlog‐ignore‐db=information_schema
binlog‐ignore‐db=performance_schema
对从库添加如下配置:
#开启日志
log‐bin = mysql‐bin
#设置服务id,主从不能一致
server‐id = 2
#设置需要同步的数据库
replicate_wild_do_table=user_db.%
#屏蔽系统库同步
replicate_wild_ignore_table=mysql.%
在主库创建用于主从账号
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
启动主从复制
首先查看主库的文件名和位点
show master status;
此步骤需要记录下显示的File和Position
然后进入从库,启动
CHANGE MASTER TO MASTER_HOST='1.15.113.171', MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=939 , MASTER_CONNECT_RETRY=30;
START SLAVE;
SHOW SLAVE STATUS;
STOP SLAVE;
要注意由于是docker中启动,host要填写公网ip,填写localhost是访问不到的,
MASTER_LOG_FILE和MASTER_LOG_POS填写上一步查询到的
运行SHOW SLAVE STATUS后观察Slave_SQL_Running和Replicate_Do_DB是否都是YES,如果是则说明大功告成了
测试