## 一主两从加Gaea读写分离
### 1、一主两从搭建
1.1、先通过脚本搭建好三台MySQL服务,并规划好主从
```powershell
master(主)
slave1(从)
slave2(从)
```
1.2、修改每台my.cnf文件
```bash
#在[mysqld]下添加
server-id=1 #每台mysql不能相同
log-bin=mysql-bin
#在其中一台从库添加
replicate-do-db=db1 #设定需要复制的库
replicate-do-table=db1.table #设定需要复制的表
```
通过脚本搭建的mysql还需要修改以下文件
```bash
#进入容器
docker exec -it mysql bash
cat /var/lib/mysql/auto.cnf #通过脚本搭建此文件会相同
#修改此文件(容器内没有vi、vim命令)
sed -i 's#原内容#修改后的内容#g' /var/lib/mysql/auto.cnf
#检查是否修改成功
cat /var/lib/mysql/auto.cnf
#退出并重启容器
docker restart mysql
```
1.3、登录到master数据库
```bash
docker exec -it mysql bash
mysql -uroot -p
show master status; #记住前两项的值
#创建连接从库的用户
grant replication slave on *.* to 用户名@'%' identified by '密码';
```
1.4、登录slave1、slave2数据库(操作相同)
```bash
docker exec -it mysql bash
mysql -uroot -p
#通过刚刚创建的用户连接到主库
change master to master_host='主库所在IP',master_port='主库端口',master_user='用户名',master_password=密码,master_log_file='值1',master_log_pos=值2;
start slave; #开启同步
show slave status\G
#确保slave_IO_Running和slave_SQL_Running两项的值都为yes即为成功
```
### 2、Gaea读写分离
1、将两个包上传到服务器
```bash
Gaea-1.2.2.tar.gz gaea.tar.gz
#上传容器镜像
docker load -i gaea.tar.gz
#解压配置包
tar -zxf Gaea-1.2.2.tar.gz
mkdir -p /mydata/gaea-docker
#将配置拷到映射目录
cp -r /Gaea-1.2.2/etc /mydata/gaea-docker/etc
#创建容器
docker run --restart=always --privileged=true -p 13306:13306 --name gaea -v /mydata/gaea-docker/etc:/go/gaea/etc -d gaea:1.2.2
```
2、编辑配置文件,连接主从数据库
```bash
cd /mydata/gaea-docker/etc/file/namespace
#编辑配置文件
vim mail_namespace_1.json
```
连接一主一从,连接没加限制库表配置的从节点
```yaml
{……
"allowed_dbs": {
"db": true,
"db2": true
}#允许访问的库
……
"slices": [
{
"name": "slice-0",
"user_name": "root",#数据库账号
"password": "password",#数据库密码
"master": "主节点IP",
"slaces": ["从节点IP"],
……
}
]
……
"users": [
{
"user_name": "macro",#登录使用的账号
"password": "123456",#登录使用的密码
……
}
]
```
3、登录
通过所在服务器的IP加13306端口,配置文件中用于登录的账号密码。