1.online DDL 3种方式: copy,会创建临时表,并记录增量。 inplace,不创建临时表,对当前的数据文件进行修改 defaul,根据参数old_alter_table判断,默认是OFF,表示采用inplace 2.pt-osc 常用
select * from gtid_executed; <-- set @@global.gtid_purged='gtid事务段'; show variables like '%purge%'; `如果发生异常:对比主库事务号,找到临界点,从库进行purged,重建复制。
pt-table-checksum + pt-table-sync
(1)、 Manager工具: – masterha_check_ssh : 检查MHA的SSH配置。 – masterha_check_repl : 检查MySQL复制。 – masterha_manager : 启动MHA。 – masterha_check_status : 检测当前MHA运行状态。 – masterha_master_monitor : 监测master是否宕机。 – masterha_master_switch : 控制故障转移(自动或手动)。 – masterha_conf_host : 添加或删除配置的server信息。 (2)、 Node工具(这些工具通常由MHAManager的脚本触发,无需人手操作)。 – save_binary_logs : 保存和复制master的二进制日志。 – apply_diff_relay_logs : 识别差异的中继日志事件并应用于其它slave。 – filter_mysqlbinlog : 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)。 – purge_relay_logs : 清除中继日志(不会阻塞SQL线程)。 (3)、自定义扩展: -secondary_check_script:通过多条网络路由检测master的可用性; -master_ip_failover_script:更新application使用的masterip;#重点 -shutdown_script:强制关闭master节点; -report_script:发送报告; -init_conf_load_script:加载初始配置参数; -master_ip_online_change-script:更新master节点ip地址;#重点 `逻辑: masterha_manager:masterMonitor (包含心跳检测 wait_until_master_is_dead) + MasterFailover masterha_master_switch会调用MasterFailover和masterRotat:查看最新的slave,补齐日志(通过mysqlbinlog基于时间戳来处理) 备注: 1.Favilover 在8小时内再次切换,会报错。 2.主从复制的检查阈值,基于second_behind_master 默认30s.# 30秒以上的主从延迟是无法启动MHA的。 3.健康检查,ping_type:ping insert,ping select,ping connect # 建议设置为ping insert.(在表插入一条记录,来验证MHA的可用性)
#share nothing 的特点。强一致性+组播 MySQL Shell,MySQL Router,MGR >Python最低要求是2.7 >MySQL5.7.17,推荐8.0.22以上 1. 测试环境: 使用MySQL Shell的命令mysqlsh开始部署,创建一个端口为3310的实例 mysql-js> dba.deploySandboxInstance(3310) 接着创建另外两个节点 3320,3330 dba.deploySandboxInstance(3320) dba.deploySandboxInstance(3330) 我们切换到3310的MySQL实例,准备开始创建Cluster mysql-js> \connect root@localhost:3310 `至少需要3个节点,最多9个 mysql-js> var cluster = dba.createCluster('testCluster') 接着把另外两个节点加入进来,先加入端口为3320的节点 mysql-js> cluster.addInstance('root@localhost:3320') 加入端口为3330的节点,日志和节点2相似。 mysql-js> cluster.addInstance('root@localhost:3330') 这个时候Cluster就创建好了。 2. 配置一下MySQL Router,创建个软链接,保证能够正常调用。 # ln -s /home/innodb_cluster/mysql-router-2.1.3-linux-glibc2.12-x86-64bit/bin/mysqlrouter /usr/bin/mysqlroute # which mysqlroute /usr/bin/mysqlroute 配置MySQL Router的启动节点为端口3310的实例 # mysqlrouter --bootstrap root@localhost:3310 --user=mysql 这个时候还是要输入密码,成功之后,这个绑定就打通了。 可以从上面的日志看出来,分配的读写端口是6446,只读端口是6447,还有x协议连接的端口为64460,64470 启动MySQL Router # mysqlrouter & #也可以 -c 自定义启动加载的配置文件 如果对MySQL Router还有些疑问,可以看看安装目录下,会生成下面的配置文件,我们就看里面的.conf文件,里面的一部分内容如下: [routing:testCluster_default_rw] bind_address=0.0.0.0 bind_port=6446 destinations=metadata-cache://testCluster/default?role=PRIMARY mode=read-write protocol=classic 我们尝试使用6446来连接登录,这个时候就通过MySQL Shell开启了连接入口,MySQL Router做了转接,连接到了里面的读写节点3310 # mysqlsh --uri root@localhost:6446 mysql-js> \sql Switching to SQL mode... Commands end with ; mysql-sql> select @@port; +--------+ | @@port | +--------+ | 3310 | +--------+ 如果切换为脚本模式查看实例的状态,可以使用里面定义的API来做,输出都是JSON串。 mysql-js> dba.configureLocalInstance('root@127.0.0.1:3310') 如果查看Cluster的信息,可以看到下面的读写节点,只读节点的状态信息 mysql-js> dba.getCluster() `得到Cluster的信息: mysql-js> cluster.status() 3.验证 模拟一个节点出现问题,可以使用killSandboxInstance方法。 mysql-js> dba.killSandboxInstance(3310) 节点被清理了,没有任何进程存在。 # ps -ef|grep mysql|grep 3310 使用6446的端口来统一连接,这个时候就切换到了端口3320的MySQL服务 # mysqlsh --uri root@localhost:6446 mysql-js> \sql Switching to SQL mode... Commands end with ; mysql-sql> select @@port; +--------+ | @@port | +--------+ | 3320 | +--------+ 所以切换的部分没有问题,我们再次把“迷失”的节点启动起来。 # mysqlsh --uri root@localhost:6446 mysql-js> dba.startSandboxInstance(3310) 这个时候再次查看Cluster的状态,3320就是主了,3310就是只读节点了。 mysql-js> dba.getCluster() `把节点2纳入到Cluster中 mysql-js> cluster.rejoinInstance('root@localhost:3310')
例如 4个物理节点,每个节点4个逻辑库(点),共16个sharding分片 对应schema.xml 16个datanode dn* 16个database 库名* `DDL:Mycat端不支持,需要到每个节点单独执行
## 6 MyCAT ```shell 例如 4个物理节点,每个节点4个逻辑库(点),共16个sharding分片 对应schema.xml 16个datanode dn* 16个database 库名* `DDL:Mycat端不支持,需要到每个节点单独执行
—From 杨建荣著