注:【网页版】右上方的悬浮框( 有目录索引 )
docker 安装,未经严格校验、还请读者见谅
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# ^^^ 安装依赖包
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# ^^^ 设置阿里云镜像源
sudo yum install docker-ce #安装 Docker-CE( 过程选择 y )
docker -v #查看版本( 同时验证是否安装成功 )
sudo systemctl enable docker #开机自启
sudo systemctl start docker #启动docker服务
# 登录啊里镜像官网,将命令复制至 /etc/docker/daemon.json
vim /etc/docker/daemon.json #复制命令至此目录下
systemctl restart docker #重启 docker
# 创建 portainer 可视化 docker 管理器
docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer-test portainer/portainer
systemctl stop firewalld.service # 关闭防火墙
1 - 啊里镜像官网
2 - 复制命令时若失败,进入如下操作:
mv /etc/docker/daemon.json daemon.conf
3 - 操作完成后,可进入可视化管理界面:
Docker 可视化管理访问地址
初次访问需注册,建议密码:adminadmin
# 创建目录
mkdir /data/mysql/master01 -p
cd /data/mysql/master01
mkdir conf data
chmod 777 * -R
# 创建配置文件
cd /data/mysql/master01/conf
vim my.cnf
# 输入如下内容
[mysqld]
log-bin=mysql-bin # 开启二进制日志
server-id=1 # 服务 id,不可重复
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
# 创建容器并【启动】,可以在可视化页面启动
docker create --name percona-master01 -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/my.cnf.d -p 3311:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
# docker start percona-master01 && docker logs -f percona-master01
# 【启动后,移步至 MySQL 命令行】
# 端口:3311 密码:root
# 创建同步账户以及授权
create user 'debj'@'%' identified by 'debj';
grant replication slave on *.* to 'debj'@'%';
flush privileges;
# 重新启动( 建议关闭,再开启,免得出异常 )
show master status; #查看 master 状态( 从库联系信息 )
show global variables like 'binlog%'; #查看二进制日志相关的配置项
show global variables like 'server%'; #查看 server 相关的配置项
# 创建目录
mkdir /data/mysql/slave01
cd /data/mysql/slave01
mkdir conf data
chmod 777 * -R
# 创建配置文件
cd /data/mysql/slave01/conf
vim my.cnf
# 输入如下内容
[mysqld]
server-id=2 #服务 id,不可重复
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
# 创建容器并启动,可以在可视化页面启动
docker create --name percona-slave01 -v /data/mysql/slave01/data:/var/lib/mysql -v /data/mysql/slave01/conf:/etc/my.cnf.d -p 3312:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
# 启动 # docker start percona-slave01 && docker logs -f percona-slave01
#【移步至 MySQL 命令行】
# 端口:3312 密码:root
# 设置 master 相关信息
set sql_mode = '';
set sql_mode = 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES';
# navicat 连接 mysql 3311 端口
CHANGE MASTER TO master_host='192.168.133.128',
master_user='debj',
master_password='debj',
master_port=3311,
master_log_file='mysql-bin.000004',
master_log_pos=154;
start slave; #启动同步
show slave status; #查看 master 状态( 建议在查询页面查看 )
# 创建目录
mkdir /data/mysql/master02
cd /data/mysql/master02
mkdir conf data
chmod 777 * -R
# 创建配置文件
cd /data/mysql/master02/conf
vim my.cnf
# 输入如下内容
[mysqld]
log-bin=mysql-bin # 开启二进制日志
server-id=1 # 服务 id,不可重复,不同容器中,id 互不影响
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
# 创建容器并【启动】,可以在可视化页面启动
docker create --name percona-master02 -v /data/mysql/master02/data:/var/lib/mysql -v /data/mysql/master02/conf:/etc/my.cnf.d -p 3313:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
# docker start percona-master02 && docker logs -f percona-master02
# 【启动后,移步至 MySQL 命令行】
# 端口:3313 密码:root
# 创建同步账户以及授权
create user 'debj'@'%' identified by 'debj';
grant replication slave on *.* to 'debj'@'%';
flush privileges;
# 重新启动( 建议关闭,再开启,免得出异常 )
show master status; #查看 master 状态( 从库联系信息 )
show global variables like 'binlog%'; #查看二进制日志相关的配置项
show global variables like 'server%'; #查看 server 相关的配置项
# 创建目录
mkdir /data/mysql/slave02
cd /data/mysql/slave02
mkdir conf data
chmod 777 * -R
# 创建配置文件
cd /data/mysql/slave02/conf
vim my.cnf
# 输入如下内容
[mysqld]
server-id=2 #服务 id,不可重复
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
# 创建容器并启动,可以在可视化页面启动
docker create --name percona-slave02 -v /data/mysql/slave02/data:/var/lib/mysql -v /data/mysql/slave02/conf:/etc/my.cnf.d -p 3314:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
# 启动 # docker start percona-slave02 && docker logs -f percona-slave02
#【移步至 MySQL 命令行】
# 端口:3314 密码:root
# 设置 master 相关信息
set sql_mode = '';
set sql_mode = 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES';
# navicat 连接 mysql 3311 端口
CHANGE MASTER TO master_host='192.168.133.128',
master_user='debj',
master_password='debj',
master_port=3313,
master_log_file='mysql-bin.000004',
master_log_pos=154;
start slave; #启动同步
show slave status; #查看 master 状态( 建议在查询页面查看 )
两个主从库创建好后
分别在两个主库中创建 test_01 数据库
再分别创建两个 test_01 表
此时即可在主从表中添加数据,查看变化
CREATE TABLE `test_01` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pickName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
安装 jdk 方式不止其一种,其它方式奕可
因为 mycat 由 java 编写,需要 jre 来支持其运行
Oracle 官网下载 JDK
sudo mkdir /usr/lib/jvm
# 利用 Xftp 将下载好的 jdk.tar.gz 复制至此目录下
tar -zxvf jdk-8u141-linux-x64.tar.gz -C /usr/lib/jvm
sudo vim ~/.bashrc
# 在末尾追加以下内容( 注意路径名中 jdk 版本号 )
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_141
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source ~/.bashrc # 使环境变量生效
# 设置默认 jdk
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_141/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_141/bin/javac 300
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.8.0_141/bin/jar 300
sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/jdk1.8.0_141/bin/javah 300
sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.8.0_141/bin/javap 300
sudo update-alternatives --config java
java -version # 测试是否安装成功
javac -version # 测试是否安装成功
安装 mycat github 下载
mkdir /data/mycat
cd /data/mycat
# 利用 Xftp 将 mycat 复制至此目录下
tar -xvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz
mv mycat mycat01 # 重命名
cd mycat01/conf/ # 进入文件夹,将下面的三个配置文件覆盖掉( 个人建议先删除,再逐个复制 )
# 【三个配置文件,配置好后】,启动服务
cd /data/mycat/mycat01/bin/
./startup_nowrap.sh && tail -f ../logs/mycat.log
#【补充:强制杀死占用该端口的线程】 # netstat -tunpl |grep 8066
# 【移步至 MySQL】 端口:8066 密码:root
# 此时,在 mycat 逻辑库中修改会根据 id 进行分片,安置至不同实体库
1/3 schema.xml 配置参数:逻辑库,逻辑表,数据节点,节点主机
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="mod-long">
<rule>
<columns>idcolumns>
<algorithm>mod-longalgorithm>
rule>
tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<property name="count">2property>
function>
mycat:rule>
2/3 server.xml 连接用户名和密码
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useSqlStat">0property>
<property name="useGlobleTableCheck">0property>
<property name="sequnceHandlerType">2property>
<property name="processorBufferPoolType">0property>
<property name="handleDistributedTransactions">0property>
<property name="useOffHeapForMerge">1property>
<property name="memoryPageSize">1mproperty>
<property name="spillsFileBufferSize">1kproperty>
<property name="useStreamOutput">0property>
<property name="systemReserveMemorySize">384mproperty>
<property name="useZKSwitch">trueproperty>
system>
<user name="root">
<property name="password">rootproperty>
<property name="schemas">test_01property>
user>
mycat:server>
3/3 rule.xml 分片规则
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="mod-long">
<rule>
<columns>idcolumns>
<algorithm>mod-longalgorithm>
rule>
tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<property name="count">2property>
function>
mycat:rule>
- 思想:【应用系统】读写操作通过【中间件 mycat 】分别去连接 【MySQL 主从表】进行读写操作
- 即本文中,主表负责写操作,从表负责读操作,不同连接之间,主从表一致
# mycat 做了数据库的代理,在高并发的情况下,会遇到单节点性能问题,所以需要部署多个 mycat 节点。
# 搭建多节点 mycat:
cd /data/mycat/
cp mycat01 mycat02 -R
cd /data/mycat/mycat02/conf/
vim wrapper.conf
# 设置 jmx 端口( 建议将原配置注释 )
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1985 vim server.xml
# 设置服务端口以及管理端口
cd /data/mycat/mycat02/conf/ # 添加至 server.xml 文件
<property name="serverPort">8067</property>
<property name="managerPort">9067</property>
# 重新启动服务
cd /data/mycat/mycat02/bin/
./startup_nowrap.sh tail -f ../logs/mycat.log
# 多节点的 mycat 搭建完成【移步至 MySQL CUD 操作后回来告诉我,You did it】
192.168.133.128-8067 # 密码:root