MySQL主从同步原理:
MySQL主从同步是在MySQL主从复制(Master-SlaveReplication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从MasterMySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到SlaveMySQL的数据库中。这样实现了主从数据同步功能。
XtraBackup备份原理:
innobackupex在后台线程不断追踪InnoDB的日志文件,然后复制InnoDB的数据文件。数据文件复制完成之后,日志的复制线程也会结束。这样就得到了不在同一时间点的数据副本和开始备份以后的事务日志。完成上面的步骤之后,就可以使用InnoDB崩溃恢复代码执行事务日志(redolog),以达到数据的一致性。
备份分为两个过程:
backup,备份阶段,追踪事务日志和复制数据文件(物理备份)。
preparing,重放事务日志,使所有的数据处于同一个时间点,达到一致性状态。
XtraBackup的优点:
可以快速可靠的完成数据备份(复制数据文件和追踪事务日志)
数据备份过程中不会中断事务的处理(热备份)
节约磁盘空间和网络带宽
自动完成备份鉴定
因更快的恢复时间而提高在线时间
三.在master服务器上在线备份数据库:
innobackupex --defaults-file=/webser/mysql55/etc/my.cnf--user=root --password=xxxx /tmp/backup/
因为我使用的配置文件是默认的/etc/my.cnf,而且我是直接使用MySQL的root用户备份的,所以我省略了--defaults-file参数和--user参数。
执行命令前请先检查MySQL的配置文件,查看[mysqld]下是否指定了datadir,如果没有请自行添加,否则执行命令后会报错。
默认情况下,系统会自动在备份目录下新建一个以当前时间命名的目录(格式:yyyy-mm-dd_HH-MM-SS),如果你希望自定义目录的名称,就请在命令的末尾加上--no-timesmtap参数,加上这个参数后,系统就不会自动新建目录了,所以我们要事先在备份目录下新建一个目录用来存放备份,比如/backup/full。
PS:/tmp/backup/ 为备份目录;
然后通过scp方式把master上的备份文件复制到slave机器上
[root@node6683 full]# scp -r ./2018-11-07_13-47-53 root@192.168.66.162:/data/backup/replication/
[主]创建复制用户 ,授予复制用户replication权限
GRANT REPLICATION SLAVE ON *.* TO 'rep'@'10.10.6.%' IDENTIFIED BY '123456';
四.slave机器上操作;
1)关闭mysql服务;
然后清空mysql数据目录下文件,例如本机mysql的数据目录是:/webser/mysql55/var/
清空MySQL的数据目录
rm -rf /mysql/*
备注:在生产环境中,如果有足够的空间,建议采用重命名的方式进行备份。
2)开始恢复数据
假设备份文件的路径在:/webser/2015-08-12_13-54-56
回滚日志文件:
innobackupex--defaults-file=/etc/my.cnf --user=root --password=xxxx --apply-log/tmp/backup/2015-08-12_13-49-32/
恢复数据文件:
innobackupex--defaults-file=/etc/my.cnf --user=root --password=xxxx --copy-back/tmp/backup/2015-08-12_13-49-32/
以上操作,请务必按照顺序执行,操作顺序颠倒,会引起mysql服务器启动不了!
3)修改数据目录权限:
chown -R mysql:mysql /webser/mysql55/var
关闭:selinux
# setenforce 0
4)安全方式启动mysql,查看是否有异常;
/webser/mysql55/bin/mysqld_safe--defaults-file=/webser/mysql55/etc/my.cnf &
如果没有异常报错,就关闭mysql
/webser/mysql55/bin/mysqladmin-uroot -p shutdown
5)在主库备份目录上查看binlog日志文件的位置值,做主从同步:
cat /tmp/backup/2015-08-12_13-49-32/xtrabackup_binlog_info
wwwmaster.000458 1022022953
6)在slave机器上做主从相关操作:
CHANGE MASTER TO
MASTER_HOST='192.168.1.xxx',
MASTER_USER='rep',
MASTER_PASSWORD='xxxxxx',
MASTER_PORT=3306,
MASTER_LOG_FILE='wwwmaster.000458',
MASTER_LOG_POS=1022022953;
启动主从同步:
start slave;
查看slave状态:
#show slave status\G;
root@mysql668713:37: [(none)]> show slave status\G;
***************************1. row ***************************
Slave_IO_State: Waiting formaster to send event
Master_Host: 192.168.66.83
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 575
Relay_Log_File:node6687-relay-bin.000005
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 575
Relay_Log_Space: 530
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert:No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 3306
Master_UUID:ee34958f-ce2a-11e8-96a3-708bcda9e75d
Master_Info_File:/var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has readall relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version: