推理、部署与算力3895 字

Sharding-Sphere 读写分离 分布式事务原理 及 实战

·全库 404 / 611

《Sharding-Sphere 读写分离 分布式事务原理 及 实战》共 0.4 万字,通篇围绕 MySQL、数据库、权限、成本 展开,归在「推理、部署与算力」这一层。

覆盖MySQL数据库权限成本部署缓存

适合要把模型跑起来,还得跑得起的人

目录骨架(6 节)
  1. (读写分离原理 图解 PPT)
  2. 基于binlog + relaylog
  3. 配置:1。master主节点 开启binlog
  4. binlog 的三种 类型
  5. Binary Logging Formats API查看
  6. mixed自动选择

内容提要:

(读写分离原理 图解 PPT)

image.png

基于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中没有此 是无法同步的。

资料里没有你的场景?

把你手上的数据和想解决的那个环节发上来,我们按具体情况回,不复述方法论。

发布需求