• mysql 集群与分区


     

    一、主从集群配置

      原理:主服务器建立二进制日志,每产生语句或磁盘变化,写进日志;从服务器读取主服务器的二进制日志从而建立relaylog日志;然而主服务器需要授权复制账号给从服务器来监听二进制日志。

      a) 建立主服务器二进制日志:log-bin = mysql-bin (my.cnf中配置)

      b) 主服务器二进制日志的格式:binlog-format = mixed (statement|row|mixed: 可监听语句或行变化或混合的)

      c) 建立从服务器relay日志:relay-log = mysql-relay (my.cnf中配置)

      d) 为服务器建立唯一标识符server-id = ...199|200|201... (不同服务器ID不同,使用int类型)

      e) 通过命令建立主服务器账号密码:grant replication client,replication slave on *.* to ‘repl’@’192.168.%.%’ identified by ‘repl’;   ‘repl’@’192.168.%.%’为授权账号,‘repl’为密码)

      f) 通过命令为从服务器建立连接:change master to

        master_host = ‘192.168.0.199’ (主服务器IP),

        master_user = ‘repl’,

        master_password = ‘repl’,

        master_log_file = ‘mysql-bin.000001’,

        master_log_pos = 278; (show master status; 查看)

      g) 命令开启slavestart slave;

      h) 查看从服务器连接详情:show slave status;

      i) 重置slavereset slave;

      j) 关闭slavestop slave;

    二、主主复制(可参考主从复制)

    三、主主复制的主键冲突解决(两台服务器)

      a) 一台服务器设置(奇数):

        i. set session auto_increment_increment = 2; (自增2

        ii. set session auto_increment_offset = 1; (从1开始自增)

        iii. set global auto_increment_increment = 2;

        iv. set global auto_increment_offset = 1;

      b) 一台服务器设置(偶数):

        i. set session auto_increment_increment = 2; (自增2

        ii. set session auto_increment_offset = 2; (从2开始自增)

        iii. set global auto_increment_increment = 2;

        iv. set global auto_increment_offset = 2;

    四、mysql-proxy完成负载均衡与读写分离

      注意:均衡不是指sql语句为单位的均衡,而是以mysql连接节点来均衡;

      a) 下载安装mysql-proxy

      b) 建立mysql代理服务器:./bin/mysql-proxy -P 192.168.0.199:4040 --proxy-backend-addresses=192.168.0.199:3306 --proxy-backend-addresses=192.168.0.200:3306

      c) 代理服务器连接: mysql -h 192.168.0.199 -P 4040 -uroot -p

      d) 配置读写分离连接: ./bin/mysql-proxy 

        -b 192.168.0.199:3306  ()

        -r 192.168.0.200:3306 (读)

        -s /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua(读写脚本)

    五、partition分区

      a) range分区:

       CREATE TABLE `test` (

        `id` int(11) unsigned NOT NULL AUTO_INCREMENT,

        `name` varchar(255) DEFAULT NULL,

        PRIMARY KEY (`id`)

        ) ENGINE=InnoDB DEFAULT CHARSET=utf8

        PARTITION BY RANGE (id) # 使用ID来划分范围

        (PARTITION t0 VALUES LESS THAN (1000),

        PARTITION t1 VALUES LESS THAN (2000),

        PARTITION t2 VALUES LESS THAN (maxvalue)) ;

        #MAXVALUE 表示最大的可能的整数值

      b) list分区:

        CREATE TABLE `user ` (

        `id`int(11),

        `name` varchar(11),

        `addr_id` int(11)

        ) ENGINE=InnoDB DEFAULT CHARSET=utf8

        PARTITION BY LIST(addr_id) (

        PARTITION beijing VALUES IN(1,2),

        PARTITION hebei VALUES IN(3,4,5),

        PARTITION guangdong VALUES IN(6,7),

        ...

        );

      c) hash分区

    六、事务

      特性:原子性、一致性、隔离性、持久性。

      a) 原子性:指某几个sql语句的影响,要么都发生,要么都不发生。

      b) 一致性:事务前后的数据,保持业务上的合理一致。

      c) 隔离性:在事务进行过程中,其他事务看不到此事务的任何效果。

      d) 持久性:事务一旦发生则不能取消,只能通过补偿性事务来抵消效果。

  • 相关阅读:
    git命令解决冲突 Jim
    浏览器控制台模拟接口请求 Jim
    Chrome(谷歌浏览器)安装Vue插件vuedevtools Jim
    Linux内核设计艺术0628
    平方误差代价函数
    机器学习笔记一
    检测网站502并使用企业微信机器人通知
    对四川省2022年高考理科20题(2)的分析过程记录与思考 2022.6.18
    2022年新1卷和2020年甲卷的圆锥曲线大题赏析
    torch中的mask:masked_fill, masked_select, masked_scatter
  • 原文地址:https://www.cnblogs.com/zgxblog/p/13220470.html
Copyright © 2020-2023  润新知