MySQL ☢️

从入门到删库跑路

基础

  • 主键 auto_increment 可白再用了, uuid 也不咋地

  • 事务 undo 与 redo 日志记录数据库数据变化

  • 在线改表结构 percona 生产新表 修改表结构---->新数据插入新表, 旧数据同步到新表

    pt-online-schema-change --host=xxx --port=xxx --user=xxx --password=xxx --alert "xxx" D=xxx,t=xxx --print --execute
    
  • 查询优化

      1. 查询条件用索引字段加速
      2. 限定可查询数据范围
    
  • 写入优化 tokudb 引擎 :支持事务 nosql

  • 锁 共享锁: 只有 serializable 隔离级别支持, 不排他 排它锁: 默认隔离级别,只有一个事务可以持有锁

同步 异步 不同步数据

pxc 集群

pecona 只支持 innodb 引擎 数据强一致性 实时同步数据

pxc 集群启动时 要从最后一个退出的节点启动, 最后退出的节点会被标记为主节点, grastate.dat 文件 safe_to_bootstrap=1 表示这个节点是最后退出的节点, 要作为主节点启动 文件位置在 mysql data 目录

pxc 5.7.21 ,高版本有问题,待研究

主节点容器:

docker run -d -p xxx:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-e CLUSTER_NAME=master \
-e XTRABACKUP_PASSWORD=root \
-v xxx:/var/lib/mysql --privileged \
--name=node1 --net=xxxx pxc

从节点容器:

docker run -d -p xxx:3306 -e MYSQL_PASSWORD=root \
-e CLUSTER_NAME=master \
-e XTARBACKUP_PASSWORD=root \
-e CLUSTER_JOIN=node1 \
-v xxx:/var/lib/mysql --privileged \
--name=node2 --net=xxx pxc

数据分片, 数据切分到不同的 pxc 集群上

replication 集群

基于 mysql binlog, 异步同步数据, 数据只能单向从主节点同步到从节点

mycat 中间件

server.xml 配置 mycat 虚拟用户与数据库, 可以配置多个

pxc 只需要负载均衡 replication 需要读写分离

<mycat:server>
  <user name="admin" defaultAccount="true">
    <property name="password">admin</property>
    <property name="schemas">mycat</property>
  </user>
</mycat:server>

schema.xml

<dataHost name="mycat" maxCon="2000" minCon="100"
balance="0" writeType="1" dbType="mysql" dbDriver="native"
switchType="1" slaveThreshold="100">
  <heartbeat>select 1</heartbeat>
  <!--节点-->
  <writeHost host="xx" url="xxx:3306" user="root" password="root">
    <!--readHost balance需要为3-->
  </writeHost>
</dataHost>

dataNode 指定 mycat 使用的数据库

schema 指定虚拟库, table 指定切分的表

rule.xml

分片规则

上次更新: 2 个月前