1. 什么是主从复制架构
主从复制架构有多个mysql节点,一个主节点,其他的是从节点,从节点不处理请求,只是同步主节点的数据
2. 工作步骤

(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将改变反映它自己的数据
3. 主从复制架构步骤
1. 使用链接克隆创建一个主节点所在的虚拟机,和若干(我这里用了一个)从节点所在的虚拟机 -VMware右键虚拟机,点击管理,点击克隆
2. 开启主节点和从节点的虚拟机
3. 启动各自mysqld服务
4. 修改配置文件 vim /etc/my.cnf ,加末尾就可以
* master: server-id=1 不能重复
log-bin=mysql-bin 生成日志文件的前缀
log-slave-updates 日志变化时从节点自动更新
slave-skip-errors=all 从节点更新时自动跳过错误的语句
* slave(可以不配置,如果从节点还有从节点就必须配置了):
server-id=2
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all
5. 重启mysql,登陆mysql,使用show variables like 'server_id'语句查看是否生效
6. 主节点执行 show master status; 命令 ,记录下 File 和Position
7. 从节点执行:
* change master to
master_host = '主节点ip',
master_user = 'root',
master_password = '-RootC21w',
master_log_file = 'File下的内容',
master_log_pos = Positon下的内容;
8. 开启从节点 start slave (stop slave 是关闭,show slave status; 查看从节点状态);
*Slave_IO_Running: Yes
Slave_SQL_Running: Yes 两个都是Yes表示开启成功
-9. 如果是克隆的虚拟机,mysql的uuid是相同的,会导致Slave_IO_Running: No,需要去修改uuid
*vim /var/lib/mysql/auto.cnf
--10. 每次重启主节点的mysqld后,要重新配置从节点
* 从节点执行reset slave;
* 主节点执行 show master status; 命令 ,记录下 File 和Position
* 执行第七步
* start slave;开启
4. 读写分离架构步骤
1. 下载 http://dl.mycat.org.cn/1.6.7.1/Mycat-server-1.6.7.1-release-20200209222254-linux.tar.gz
2. 解压 tar -zxvf Mycat-server-1.6.7.1-release-20200209222254-linux.tar.gz -C /usr/java/mycat/
3. 替换 使用 mysql-connector-java-8.*.jar 替换 mycat/lib 下的 mysql-connector-java/5.1.35
4. 赋予权限 chmod 777 mysql-connector-java-8.0.16.jar
5. 添加环境变量
* vim /etc/profile
* 编辑模式下输入 export MYCAT_HOME=/usr/mycat/mycat1.6.7.1/
export PATH=$PATH:$MYCAT_HOME/bin
* 保存
6. 使环境变量生效 source /etc/profile
7. 修改配置文件:进入mycat的config目录,执行 vim schema.xml
* 把里面除了xml头和mycat标签都删除,写入下面内容:
<!--定义一个mycat逻辑库,名字设为logic,dataNode表示映射的真实数据的节点,起名logicNode
checkSQLschema表示是否校验SQL语法
sqlMaxLimit表示SQL的最大长度-->
<schema name="logic" checkSQLschema="true" sqlMaxLimit="200" dataNode="logicNode"></schema>
<!--定义mycat的数据节点,name要和dataNode一致,dataHost映射真实主机,database映射真实的库-->
<dataNode name="logicNode" dataHost="logicHost" database="test" />
<!--定义数据主机 name要和dataHost一致-->
<dataHost name="logicHost" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<!--心跳监测,查看节点是否正常-->
<heartbeat>select user()</heartbeat>
<!--写节点-->
<writeHost host="hostM1" url="jdbc:mysql://主节点ip:3306?useSSL=false&serverTimezone=GMT%2B8" user="root" password="-RootC21w">
<!--从节点-->
<readHost host="hostS1" url="jdbc:mysql://从节点ip:3306?useSSL=false&serverTimezone=GMT%2B8" user="root" password="-RootC21w" />
</writeHost>
</dataHost>
8. 修改配置文件:进入mycat的config目录,执行 vim server.xml
* 把里面除了xml头和mycat标签都删除,写入下面内容:
<system>
<property name="defaultSqlParser">druidparser</property>
<property name="charset">utf8</property>
</system>
<!--登陆虚拟库logic 的用户名和密码-->
<user name="root">
<property name="password">root</property>
<property name="schemas">logic</property>
</user>
9. 启动:进入bin目录,执行./mycat start/console (用console启动可以生成日志)
10. 启动虚拟数据库 mysql -uroot -proot -P8066 -hMyCat所在的虚拟机ip
8. 程序中连接逻辑数据库,库名是设置的虚拟库名,端口号是8066