Sharding-Sphere 读写分离 分布式事务原理 及 实战
《Sharding-Sphere 读写分离 分布式事务原理 及 实战》共 0.4 万字,通篇围绕 MySQL、数据库、权限、成本 展开,归在「推理、部署与算力」这一层。
适合要把模型跑起来,还得跑得起的人
目录骨架(6 节)
- (读写分离原理 图解 PPT)
- 基于binlog + relaylog
- 配置:1。master主节点 开启binlog
- binlog 的三种 类型
- Binary Logging Formats API查看
- mixed自动选择
内容提要:
(读写分离原理 图解 PPT)

基于binlog + relaylog
实战:
配置:1。master主节点 开启binlog
默认关闭。开启1%性能损耗,cnf配置文件指定 log-bin=binlog-name 或者默认主机名用set sql_log_bin=1 命令开启
show global variables like "%log_bin%"; 查看相关参数情况
binlog 的三种 类型
show global variables like "binlog_format"
参数开启 binlog_format=row | statement | mixed
Binary Logging Formats API查看
https://dev.mysql.com/doc/refman/5.7/en/binary-log-formats.html
建议生产环境用row每行(默认:修改的行。更好恢复但量大少用alter table) ,
statement(会修改的sql。特殊情况会出问题比如 sleep() ;last_insert_id(); user-defined function)
mixed自动选择
2.
slave节点指定某个binlog 文件,以及同步的offset , 以及主节点IP 用户名密码
在MySQL 5.7.7之前,默认的格式是STATEMENT。 在MySQL 5.7.7及以上版本中,默认为ROW。 异常:在NDB集群中,默认是MIXED; NDB集群不支持基于语句的复制。
具体操作:
我这里的 主从虚拟机 分别是 172.31.26.120 和 172.31.23.118
开启 主节点的binlog
我这 虚拟机 安装路径cd /var/lib/mysql/
修改 my.cnf 目录在 vi /etc/my.cnf
加入 log-bin=/var/lib/mysql/mysql-bin
服务标记 server-id=1001
然后重启服务:
systemctl restart mysqld
当然你也到安装目录去重启
监测是否主已 OK
ls /var/lib/mysql/ 查看是否已有bin.前缀的 文件 当然你也可以通过命令查看参数 show global variables like "%log_bin%";
设置白名单 用户:系统库mysql里面的user表加入 tianming IP地址为 172.31.23.118
-- 创建用户和授权
GRANT REPLICATION SLAVE ON. TO 'gp'@'172.31.23.118'IDENTIFIED BY 'Admin_123';
--刷新权限
flush privileges;
接下来slave 节点 连上slave节点的 mysql
mysql -uroot -pAdmin_123
配置 :my.conf 添加 server-id=1002
否则会报错:ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log
然后重启服务:systemctl restart mysqld 当然你也到安装目录去重启
再执行 脚本命令 . 设置主节点的IP 连上去的用户名密码 以及master 节点的
show master status\G;
的file 和position 文件和位置 11278 206215
再到从节点执行如下命令:注意修改 ip 用户名密码以及 主节点查的 position
change master to master_host='172.28.55.36',master_user='root', master_password='Admin_123', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=206215;
可能异常 :STOP SLAVE IO_THREAD FOR CHANNEL ''; 执行如上命令
启动 slave 同步进程
start slave; 查看slave 同步状态 show slave status\G; -- 可见Slave_IO_Running 和 Slave_SQL_Running 是否YES 可能异常 连接失败:可在IO_Error Master command COM_REGISTER_SLAVE failed: Access denied for user 'tm'@'%' (using password: YES) (Errno: 1045) 当权限显示为 REPLICATION是方才正确。此时,登陆从服务器再次执行 start slave命令即可。 可能异常:Could not execute Delete_rows event on table mysql.user; Can't find record in 'user', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000001, end_log_pos 5551 原因:master需要删除 从不存在出错 可能节点位置变更了 方案1尝试跳过:stop slave;set global sql_slave_skip_counter=1;start slave; 方案2修改配置的post:重新查看 主节点的status 修改post change master to master_host='172.31.26.120',master_user='tm', master_password='Admin_123', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=8784; 注意如果主从库原本库不同,需要新建否则binlog中没有此 是无法同步的。
