Mysql数据备份演练——Xtrabackup

需求:公司内部的数据库使用版本是Mysql5.6.42,但是无任何备份,担心数据库奔溃或者磁盘损坏导致数据无法恢复,影响公司的业务,因此把Mysql5.6绿色迁移到另外一台父亲在另一台测试服务器,并且建立测试数据库,使用xtrabackup进行备份。

Mysql数据库操作:

迁移数据库:scp -rp -P5012 root@IP:/usr/local/mysql /usr/local/

建立Mysql用户:groupadd -g 1000 mysql

                           useradd -u 1000 -g mysql -s /sbin/nologin mysql

***根据配置文件创建相对应的数据存储目录,主要修改文件的所有者

因为两个启动了两个数据库实例在mysql5.6.14版本中,mysql_install_db命令读取my.cnf配置文件时,只会读取[mysqld]配置模块,它不会读取多实例中配置的[mysqldNNN],解决方案为修改my.cnf,把[mysqldNNN]依次修改为[mysqld],每次初始化一个数据库。

初始化数据库(报了两次错误,原因为确实某些依赖包,把报错信息粘贴到百度,安装相关依赖包即可):

[root@localhost mysql]# pwd
/usr/local/mysql

[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --defaults-file=/etc/my.cnf 

启动Mysql实例:

/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/home/mysq_data --plugin-dir=/usr/local/mysql/lib/plugin --user=root --log-error=/var/log/mysqld.log --pid-file=/home/mysql_data/db.pid --socket=/homemysql_data/mysql.sock --port=3306

设置初始化密码:[root@localhost mysql]# ./bin/mysqladmin -u root password '11111'

创建用户,实现可远程登录:create user 'li'@'%' identified by '123456';

                                                grant all privileges on *.* to 'li'@'%';

                                                 flush privileges;

Xtrabackup演练:

设置percona仓库:[root@localhost home]# yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

安装xtracbakup:[root@localhost home]# yum install percona-xtrabackup -y

修改my.cnf文件,添加一下配置:

[xtrabackup]
user=li
password=123456

创建存储数据库备份的目录:

[root@localhost xtra]# pwd
/data/xtra

数据库备份命令:[root@localhost xtra]# innobackupex -uroot /data/xtra/

##看到innobackupex: completed OK!代表成功,备份成功后产生三个与xtrabackup的文件( xtrabackup_info,xtrabackup_checkpoints,xtrabackup_logfile):

[root@localhost 2020-07-16_09-35-37]# cat xtrabackup_checkpoints 

backup_type = full-backuped      ###完全备份      
from_lsn = 0
to_lsn = 2979610
last_lsn = 2979610
compact = 0
recover_binlog_info = 0

##一般情况先,完全备份后,数据尚不能用于回复操作,因为备份的数据可能包含尚未提交的事务或者事务已经提交但是数据为同步到数据文件中。因此数据文件可能出现处理不一致状态,“准备”主要是通过回滚未提交的事务及同步已经提交的事务至数据文件

[root@localhost 2020-07-16_09-35-37]#innobackupex --apply-log /data/xtra/2020-07-16_17-05-27/

再次查看状态:

[root@localhost 2020-07-16_09-35-37]# cat xtrabackup_checkpoints 

backup_type = full-prepared           ###预备好的状态,可直接恢复

##进行向数据库中插入几条数据——mysql> insert into new values(7);

##实施增量备份:第一个目录为备份目录,第二个目录为参考的完全备份目录

[root@localhost 2020-07-16_17-26-45]# innobackupex --incremental /data/xtra/ --incremental-basedir /data/xtra/2020-07-16_17-05-27/

##模拟数据库崩溃(直接在数据库运行状态中,rm -rf 所有数据目录下的文件,这样只能通过kill -9 PID杀死Mysql进程),停止数据库服务后,直接通过命令恢复数据库:

预处理完全备份:

[root@localhost 2020-07-16_09-35-37]#innobackupex  --apply-log  --redo-only /data/xtra/2020-07-16_17-05-27/

合并增量备份:

[root@localhost 2020-07-16_09-35-37]#innobackupex  --apply-log  --redo-only /data/xtra/2020-07-16_17-05-27/ --incremental-dir=/data/xtra/2020-07-16_17-26-45/

恢复数据库:

innobackupex --copy-back /data/xtra/2020-07-16_17-05-27/

恢复完成后检查文件权限即文件所有者的属性,确保mysql的启动者能够拥有足够大的权限,最后启动mysql,即能恢复数据库:

[root@localhost 2020-07-16_09-35-37]# /usr/local/mysql/support-files/mysql.server start

原文地址:https://www.cnblogs.com/liyuanshu/p/13300746.html