MySQL 5.7 (3复制)

来源:互联网 发布:centos下安装jdk1.8 编辑:程序博客网 时间:2024/06/06 18:17
mysql 5.5 开始出现半同步复制(semi_sync_replication)
mysql 5.6 出现GTID,  delay replication,   基于库的并行复制
mysql 5.6 开始支持多源复制,用的较多,基于GTID
mysql 5.7 lossless replication,   multli-source replication,    group commit,  基于事务的并行复制,  group replicaiotn(2016年)

推荐使用:GTID+ROW+(增强半同步)


root@localhost [(none)]>flush logs;
Query OK, 0 rows affected (0.01 sec)


root@localhost [(none)]>
root@localhost [(none)]>show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000002 |      194 |              |                  | 8170836d-8e48-11e7-ac68-000c29b48f84:1-3 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)


create user 'repl'@'%' identified by '123456';
grant replication slave on *.* to 'repl'@'%' identified by '123456';


/usr/local/mysql/bin/mysqlbinlog -vv  /data/mysql/mysql3306/logs/mysql-bin.000002 --start-position=194 --base64-output=DECODE-ROWS




mkdir /data/mysql/mysql3307/{data,logs,tmp} -p
sed -i 's/3306/3307/g' /data/mysql/mysql3307/my3307.cnf


cd /usr/local/mysql
[root@vm-test1 mysql]# ./bin/mysqld --defaults-file=/data/mysql/mysql3307/my3307.cnf --initialize
[root@vm-test1 mysql]# 
[root@vm-test1 mysql]# /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3307/my3307.cnf --user=mysql & 
[1] 5882
[root@vm-test1 mysql]# 
[root@vm-test1 data]# cat error.log |grep password
2017-09-04T06:42:11.241008Z 1 [Note] A temporary password is generated for root@localhost: 1g_FwPitKu)z
[root@vm-test1 data]# mysql -S /tmp/mysql3307.sock -uroot -p
Enter password: 
ERROR 1862 (HY000): Your password has expired. To log in you must change it using a client that supports expired passwords.
[root@vm-test1 data]# 
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3307/my3307.cnf --skip-grant-tables --user=mysql & 


把password_expired 改成不过期:
update mysql.user set password_expired='N' where user='root';
alter user user() identified by '123456';
flush privileges;
quit


===================================================================
备份:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /data/mysql/backup


恢复:
##--use-memory=4G
--apply-log    回滚日志 
--redo-only    回滚合并
合并第一个增量备份到完全备份里面
# innobackupex --apply-log  --redo-only /backup/2017-09-04_15-37-02/  --incremental-dir=/backup/2013-09-07_05-17-17/ 
执行完结尾部分出现下面的消息表示成功了 
innobackupex: completed OK!


恢复全部数据库
# innobackupex --copy-back  /backup/2013-09-06_15-37-02/


//--apply-log选项的命令是准备在一个备份上启动mysql服务  
# innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /home/tank/backup/2014-09-18_16-35-12  
//--copy-back 选项的命令从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置  
# innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /home/tank/backup/2014-09-18_16-35-12  


将备份文件中的日志应用到备份文件的数据文件上:
innobackupex --defaults-file=/data/mysql/mysql3307/my3307.cnf --apply-log --user=root  --password=123456 --port=3307 --socket=/tmp/mysql3307.sock  /data/mysql/backup/2017-09-04_15-10-27
全库还原:
rm -fr /data/mysql/mysql3307/data/*
innobackupex --defaults-file=/data/mysql/mysql3307/my3307.cnf --copy-back --user=root  --password=123456 --port=3307 --socket=/tmp/mysql3307.sock  /data/mysql/backup/2017-09-04_15-10-27
[root@vm-test1 data]# ll
total 421940
drwxr-x--- 2 root root      4096 Sep  4 15:35 -help
-rw-r----- 1 root root       451 Sep  4 15:35 ib_buffer_pool
-rw-r----- 1 root root 104857600 Sep  4 15:35 ibdata1
-rw-r----- 1 root root 104857600 Sep  4 15:35 ib_logfile0
-rw-r----- 1 root root 104857600 Sep  4 15:35 ib_logfile1
-rw-r----- 1 root root 104857600 Sep  4 15:35 ib_logfile2
-rw-r----- 1 root root  12582912 Sep  4 15:35 ibtmp1
drwxr-x--- 2 root root      4096 Sep  4 15:35 mysql
drwxr-x--- 2 root root      4096 Sep  4 15:35 performance_schema
drwxr-x--- 2 root root     12288 Sep  4 15:35 sys
drwxr-x--- 2 root root      4096 Sep  4 15:35 tcyang
-rw-r----- 1 root root        21 Sep  4 15:35 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root       570 Sep  4 15:35 xtrabackup_info
[root@vm-test1 data]# 
[root@vm-test1 mysql]# chown -R mysql:mysql ./




root@localhost [tcyang]>select * from test;
ERROR 1146 (42S02): Table 'tcyang.test' doesn't exist
root@localhost [tcyang]>
重启3307.
查看pos:
[root@vm-test1 2017-09-04_15-10-27]# more xtrabackup_info
uuid = 244ab24d-9140-11e7-9c2e-000c29b48f84
name = 
tool_name = innobackupex
tool_command = --defaults-file=/etc/my.cnf --user=root --password=... /data/mysql/backup
tool_version = 2.4.5
ibbackup_version = 2.4.5
server_version = 5.7.19-log
start_time = 2017-09-04 15:10:28
end_time = 2017-09-04 15:10:33
lock_time = 0
binlog_pos = filename 'mysql-bin.000002', position '722', GTID of the last change '8170836d-8e48-11e7-ac68-000c29b48f84:1-5'
innodb_from_lsn = 0
innodb_to_lsn = 5291402
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N
[root@vm-test1 2017-09-04_15-10-27]# 
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3307/my3307.cnf --user=mysql & 
mysql -S /tmp/mysql3307.sock -uroot -p




change master to master_host='192.168.15.100',
master_user='repl',
master_password='123456', 
master_log_file='mysql-bin.000002',
master_log_pos=722;


mysql -S /tmp/mysql3306.sock -urepl -p


start slave ;
---start slave io_thread;
stop slave;
========================================================================
影响性能:mysql prepare mutex lock  串行,5.6 group commit;


增强半同步:after_sync 5.7默认该方式
参数 rpl_semi_sync_master_wait_point 控制主库在何时提交,是在备库同步完成还是备库提交。 =[after_sync|after_commit]


master 接收到N 个slave的应答后,才commit事务。用户可以设置应答slave的数量: rpl_semi_sync_master_wait_for_slave_count = N.




打开semi-sync的正确姿势
     默认情况下的mysql复制都是异步复制,mysql通过参数来控制semi-sync开关。具体而言,
主库上通过 rpl_semi_sync_master_enabled 参数控制,备库上通过 rpl_semi_sync_slave_enabled 参数控制,
打开这两个参数后,mysql semi-sync 的特性就打开了。注意对于备库而言,为了保证半同步立即生效,需要重启slave的IO线程。
另外,还有一个比较重要的参数是 rpl_semi_sync_master_timeout ,这个参数用于控制master等待semi-slave ack报文的时间,单位是毫秒,默认是10000。
master等待超时,则切换为普通的异步复制。建议设置无穷大。
rpl_semi_sync_master_enabled,rpl_semi_sync_slave_enabled 也可以配置在master和slave的配置文件中,这样服务器重启也生效。




延时复制:change master to master_delay=N;
mysql>stop slave; 
mysql>CHANGE MASTER TO MASTER_DELAY = 600; 
mysql>start slave; 
mysql>show slave status \G; 
查看SQL_Delay的值为600,表示设置成功。 


binlog group commit:
binlog_group_commit_sync_delay=N 
binlog_group_commit_sync_no_delay_count=N 
innodb_flush_log_at_trx_commit=1 ##不用设置
sync_binlog=1  ##不用设置




replication crash safe:
relay_log_info_repository = TABLE
relay_log_recovery=on 当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为 1时,可在slave从库上开启该功能,建议开启。
sync_relay_log_info=1 这个参数和sync_relay_log参数一样,当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay-log.info里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O。当设置为0时,并不是马上就刷入relay-log.info里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。这个值默认是0,可动态修改,建议采用默认值。




并行复制
基于事务的并行复制,group commit;




replicate_do_db 参数是在slave上配置,指定slave要复制哪个库
replicate-wild-do-table
Replicate-Ignore-Table
innodb_safe_binlog            #mysql 4.1 only,roughly equivalent to innodb_support_xa  
binlog_do_db 只复制指定的数据库(主服务器配置文件里设置) 
binlog_ignore_db 不复制指定的数据库(主服务器配置文件里设置) 
replicate_ignore_table 不复制指定的表(从服务器配置文件里设置)  
replicate_wild_ignore_table 使用wild匹配来不复制的指定表(从服务器配置文件里设置),比如参数设为abc.%,表示不复制abc的所有表。 
***************适用于数据库迁移




?mysql安装方式及启动方式
?GTID复制环境搭建
?sysbench,mysql-tpcc
?1062,1032错误解决
原创粉丝点击