mysql主从简单搭建

####5.7之后 可都叫增强半同步。可配置同步返回时间

gtid = server_uuid:transaction_id

可以定位多个server产生了多少个事务(GTIDs)
从库复制了多少个事务
给每个事务做了一个唯一的编号

5.7以后从库sql thread 没有索引的情况将会全表扫描。hash table scan
复制流程:

注意:
[mysqld]
server_id=xxxx
log-bin=
binlog_format=row
gtid_mode =on
enforce_gtid_consistency = on

create user ‘repl‘@’%’ identified by b’repl4slave’;
grant replication slave on . to ‘repl‘@’%’;

auto.cnf —–select @@server_uuid;

xtrbakcup
xtrabackup –defaults-file=/etc/my.cnf -uroot -p’root’ –backup –target-dir=/data/backup/db3306_full
xtrabackup –prepare –target-dir=./

恢复:
xtrabackup –defaults-file=/etc/my.cnf –copy-back –target-dir=/data/backup/db3306_full
注意需要更改一下权限:chown -R mysql:mysql /data/backup/db3306_full

help change master to ;
change master to master_host=’192.168.11.111’,master_port=3307,master_user=’repl’,master_password=’xxxxx’,master_auto_position=1,get_master_public_key=1; —-如不加最后一个参数将无法连接主库,需手工登录。

####clone plugin 方式搭建从库

install plugin clone soname ‘mysql_clone.so’;
[mysqld]
plugin-load-add = mysql_clone.so
clone=FORCE_PLUS_PERMANENT

注:sql_require_primary_key = on
read_only=1
explicit_defaults_for_timestamp = off
这几个参数都会使clone 安装失败

show plugins;
查看clone 是否是激活状态

—uninstall plugin clone; 卸载

主库:
install plugin clone soname ‘mysql_clone.so’;
create user ‘xx‘@’%’ indetiified by ‘XXX’;
grant backup_admin on . to ‘xx’;

从库:
install plugin clone soname ‘mysql_clone.so’;
create user ‘xx‘@’%’ indetiified by ‘XXX’;
set global clone_valid_donor_list=’192.168.11.111:3308’;
grant clone_admin on . to ‘xx’;
set global log_error_verbosity=3;
clone instance from ‘xx‘@’%’192.168.11.111:3308 identified by ‘xxxx’;

然后执行:
change master to master_host=’192.168.11.111’,master_port=3307,master_user=’repl’,master_password=’xxxxx’,master_auto_position=1,get_master_public_key=1;

备库搭建完成

####主从半同步配置
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
一般不建议写到my.cnf
主库:
set global rpl_semi_sync_master_enabled=1;
set global rpl_semi_sync_master_timeout=2147483648;
从库:
set global rpl_semi_sync_slave_enabled =1;

完成之后可从主库:
show global status like ‘%semi%’; 能看到已经有一个连接上来了
当复制中断时,主库将等到timeout超时。
可以配置多个从库:rpl_semi_sync_master_wait_for_slave_count |1

早期5.5跟5.6 rpl_semi_sync_master_wait_point=after_commit; 都可能出现主从故障 复制不一致

5.7之后增强版同步:rpl_semi_sync_master_wait_point=after_sync; 解决了主从故障复制不一致

(注:可能会出现幽灵事务。crush之后mysql数据库将会redo数据提交)