MySQL复制和分区

MySQL异步、半同步配置及注意事项

MySQL5.6:基于GTID的复制可以提供更加安全的复制,多线程复制
MySQL5.5:
基本前提和步骤
master:
启用二进制日志log-bin = master-bin;log-bin-index = master-bin-index(二进制日志索引文件名)
选择一个server-id = {0-2**32-1}
创建具有复制权限的用户replication slave,replication client(连接的权限)

slave:
relay-log = relay-log
relay-log-index = relay-log-index

server-id

连接执master,并复制数据
mysql> change master to
master_host = '',
master_port = '',
master_log_file = '',
master_log_file_pos = '',
master_user = '',
master_password = ''
mysql> start slave;

复制线程:
master为每一个slave启动的dump线程,从而将二进制日志发送给slave

slave IO 线程和master dump线程交互,将日志写入relay-log中

slave SQL 线程从relay-log中获取数据,此时是单条执行的(MySQL5.6的多线程复制就是指的此刻会启动多个线程从relay-log中读取内容执行,但是只是针对单独的一个数据库)

MySQL基于ssl的复制(证书和秘钥)

半同步复制时:
配置master只响应其中一个slave复制完成,就返回;同时配置超时时间,超时后master继续写数据,主从断开,降级为异步模式开始工作

innodb_file_per_table = on

datadir = /mysql/data

半同步复制插件(/usr/local/mysql/lib/plugin/):
On Master:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;

ON Slave:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;

配置文件
On Master:
[mysqld]
rpl_semi_sync_master_enabled = 1;
rpl_semi_sync_master_timeout = 1000;

ON Slave:
[mysqld]
rpl_semi_sync_slave_enabled = 1;

percona: percona-tools监控MySQL的软件组


表分区:
将大表根据条件分割成若干个小表,MySQL5.1开始支持表分区,条件可以如:某用户表的记录超过了600万行仓储信息,此时可以根据入库的日期将表分区,也可以根据所在地将表分区等诸如此类的条件。

基本分区类型:
range分区
基于属于一个给定的连续放入列值,把多行分配给分区,这些区间要连续且不能相互重叠,使用VALUES LESS THAN操作符进行定义
现有表进行分区
alter table titles partition by range (year(from_date))
(
partition p01 values less than (1985),
partition p02 values less than (1986),
partition p03 values less than (1987),
partition p04 values less than (1988),
partition p05 values less than (1989),
partition p06 values less than (1990),
partition p07 values less than (MAXVALUE)
);
创建表时进行分区,如:将用户表按照年龄每隔10岁进行分区
create table t1 (id int, name varchar(20), age int)
partition by range (age)
(
partition p01 values le than (10),
partition p02 values le than (20),
partition p03 values le than (30),
partition p04 values le than (maxvalue)
);

文件系统存放方式:
在t1表所在的数据库目录下存放有如下文件:
db.opt t1.frm t1.par(分区信息文件,二进制数据文件) t1#P#p01.ibd t1#P#p02.ibd t1#P#p03.ibd t1#P#p04.ibd

list分区
hash分区
key分区

 

posted on 2016-03-25 15:14  曦字号  阅读(183)  评论(0)    收藏  举报

导航