林烁萱优秀作者
原创内容 来源:小居数码网 时间:2024-08-11 17:29:01 阅读() 收藏:55 分享:64 爆
导读:您正在阅读的是关于【数码知识】的问题,本文由科普作家协会,生活小能手,著名生活达人等整理监督编写。本文有4108个文字,大小约为14KB,预计阅读时间11分钟。
mysqlbackup全称MySQL Enterprise Backup(MEB),是MySQL官方推出的跨平台mysql数据库物理备份与还原的强大工具。
它支持全量备份、增量备份、备份压缩、备份验证、备份加密、流式备份等特性,类似Oracle数据库的RMAN。相比于percona公司的xtrabackup,它的功能更强大,效率更高。
下面基于mysqlbackup 8.0.28版本讲解mysqlbackup的安装、全量备份、增量备份、备份压缩、备份验证、备份还原等功能。
1. 下载
登录oracle edelivery,进入下载连接选择适合你系统的版本下载,在这里我使用的是银河麒麟Kylin OS Server V10 SP2,因此我选择一个通用的预编译二进制的tar包,如下图:没有Oracle edelivery账号的朋友可以到私信我索取软件安装包。
2. 安装
[root@light] tar xvf mysql-commercial-backup-8.0.28-linux-glibc2.17-x86_64-minimal.tar.xz[root@light] cd mysql-commercial-backup-8.0.28-linux-glibc2.17-x86_64-minimal[root@light] mv bin/mysqlbackup /usr/local/mysql/bin[root@light] chown mysql.mysql /usr/local/mysql/bin/mysqlbackup [root@light] mysqlbackup --versionMySQL Enterprise Backup Ver 8.0.28-commercial for Linux on x86_64 (MySQL Enterprise - Commercial)Copyright (c) 2003, 2022, Oracle and/or its affiliates.
安装完成。
mysqlbackup支持将数据库全部文件备份为一个独立的image,也支持将数据库按目录结构备份datafile。话不多说,分开演示。
0. 创建mysqlbackup专用账户
创建一个immeb@localhost账户,专门用于备份数据库
CREATE USER 'immeb'@'localhost' IDENTIFIED BY 'LaoGeDB123!';GRANT SELECT, BACKUP_ADMIN, RELOAD, PROCESS, SUPER, REPLICATION CLIENT ON *.* TO `immeb`@`localhost`;GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_progress TO 'immeb'@'localhost'; GRANT CREATE, INSERT, DROP, UPDATE, SELECT, ALTER ON mysql.backup_history TO 'immeb'@'localhost';GRANT LOCK TABLES, CREATE, DROP, FILE, INSERT, ALTER ON *.* TO 'immeb'@'localhost';GRANT CREATE, DROP, UPDATE ON mysql.backup_sbt_history TO 'immeb'@'localhost';GRANT ENCRYPTION_KEY_ADMIN ON *.* TO 'immeb'@'localhost';GRANT INNODB_REDO_LOG_ARCHIVE ON *.* TO 'immeb'@'localhost';GRANT ALTER ON mysql.backup_progress TO 'immeb'@'localhost';GRANT CREATE, INSERT, DROP ON mysql.backup_progress_old TO 'immeb'@'localhost';GRANT CREATE, INSERT, DROP, ALTER ON mysql.backup_progress_new TO 'immeb'@'localhost';GRANT CREATE, INSERT, DROP ON mysql.backup_history_old TO 'immeb'@'localhost';GRANT CREATE, INSERT, DROP, ALTER ON mysql.backup_history_new TO 'immeb'@'localhost';GRANT ALTER ON mysql.backup_sbt_history TO 'immeb'@'localhost';GRANT CREATE, INSERT, DROP ON mysql.backup_sbt_history_old TO 'immeb'@'localhost';GRANT CREATE, INSERT, DROP, ALTER ON mysql.backup_sbt_history_new TO 'immeb'@'localhost';
1. backup-to-image方式的全量备份与还原
1.1 备份image
备份命令:
mysqlbackup --user=immeb --password=LaoGeDB123! --socket=/data/mysql/data/mysqld.sock --backup-image=my_full_bak.mbi --backup-dir=/data/backup --show-progress --compress --with-timestamp backup-to-image
参数解释:
备份后目录结构如下:
ll /data/backup/2022-04-13_17-16-02total 4420-rw-r--r-- 1 root root 315 Apr 13 17:16 backup-my.cnfdrwxr-x--- 2 root root 33 Apr 13 17:16 datadirdrwxr-x--- 2 root root 191 Apr 13 17:16 meta-rw-r----- 1 root root 4496410 Apr 13 17:16 my_full_bak.mbi-rw-r----- 1 root root 19453 Apr 13 17:16 server-all.cnf-rw-r----- 1 root root 1570 Apr 13 17:16 server-my.cnf
1.2 查看与检验image
可以通过list-image查看备份image中的文件内容list命令:
mysqlbackup --backup-image=/data/backup/2022-04-13_17-16-02/my_full_bak.mbi list-image
可以通过validate验证备份image的有效性validate命令:
mysqlbackup --backup-image=/data/backup/2022-04-13_17-16-02/my_full_bak.mbi validate
1.3 还原image
还原数据库备份之前必须做完成以下前提:
还原命令:
mysqlbackup --datadir=/data/mysql/data --backup-image=/data/backup/2022-04-13_17-16-02/my_full_bak.mbi --backup-dir=/data/backup/2022-04-13_17-16-02/tmp --uncompress copy-back-and-apply-log
参数解释:
2. backup-to-image方式的增量备份与还原
2.1 备份image
先做全备:
mysqlbackup --user=immeb --password=LaoGeDB123! --socket=/data/mysql/data/mysqld.sock --backup-image=my_full_bak.mbi --backup-dir=/data/backup --show-progress --compress --with-timestamp backup-to-image
再做增备[方式一]:
mysqlbackup --user=immeb --password=LaoGeDB123! --socket=/data/mysql/data/mysqld.sock --with-timestamp --compress --incremental --incremental-base=dir:/data/backup/2022-04-14_00-39-35 --backup-dir=/data/backup --backup-image=my_inc_bak.mbi backup-to-image
再做增备[方式二]:
mysqlbackup --user=immeb --password=LaoGeDB123! --socket=/data/mysql/data/mysqld.sock --with-timestamp --compress --incremental --incremental-base=history:last_backup --backup-dir=/data/backup/ --backup-image=my_inc_bak.mbi backup-to-image
你一定会问:增量备份[方式一]和增量备份[方式二]有什么区别呢?首先看它俩表面的区别在于–incremental-base的写法:方式一: --incremental-base=dir:/data/backup/2022-04-14_00-39-35方式二: --incremental-base=history:last_backup
–incremental-base=dir:/data/backup/2022-04-14_00-39-35是上次全备或增备所在目录,那么这次增量备份就要基于这个目录中的备份为基准。–incremental-base=history:last_backup是直接使用history:last_backup代替上一次的备份,省去人工寻找目录的麻烦,MEB会自动到backup_history表中查找上一次备份的目录。这是MEB为我们做的易用性改进。
多个增量备份,只需要多次执行上面的命令即可。
2.2 还原image
先还原全备:
还原数据库备份之前必须做完成以下前提:
还原全备命令:
mysqlbackup --datadir=/data/mysql/data --backup-image=/data/backup/2022-04-14_00-39-35/my_full_bak.mbi --backup-dir=/data/backup/2022-04-14_00-39-35/tmp --uncompress copy-back-and-apply-log
2.3 再还原增备:还原增备命令:
mysqlbackup --backup-image=/data/backup/2022-04-14_00-40-43/my_inc_bak.mbi --backup-dir=/data/backup/2022-04-14_00-40-43/tmp --datadir=/data/mysql/data --incremental copy-back-and-apply-log
多个增量还原,只需要多次执行上面的命令即可。注意----backup-image每次都要用当前增量备份的目录。
3.1 备份datafile
备份命令:
mysqlbackup --user=immeb --password=LaoGeDB123! --socket=/data/mysql/data/mysqld.sock --backup-dir=/data/backup --show-progress --compress --with-timestamp backup
参数解释:
备份后目录结构如下:
ll 2022-04-13_17-32-49/datadirtotal 2768-rw-r----- 1 root root 56 Apr 13 17:32 backup-auto.cnf-rw-r----- 1 root root 1965 Apr 13 17:32 binlog.000006.bz-rw-r----- 1 root root 16 Apr 13 17:32 binlog.index-rw-r----- 1 root root 7680 Apr 13 17:32 ibbackup_logfile-rw-r----- 1 root root 5196 Apr 13 17:32 ib_buffer_pool-rw-r----- 1 root root 50974 Apr 13 17:32 ibdata1.ibzdrwxr-x--- 2 root root 196 Apr 13 17:32 mysql-rw-r----- 1 root root 2405933 Apr 13 17:32 mysql.ibzdrwxr-x--- 2 root root 8192 Apr 13 17:32 performance_schemadrwxr-x--- 2 root root 28 Apr 13 17:32 sys-rw-r----- 1 root root 508 Apr 13 17:32 tablespaces_trackerdrwxr-x--- 2 root root 209 Apr 13 17:32 ttecdis-rw-r----- 1 root root 152091 Apr 13 17:32 undo_001.uz-rw-r----- 1 root root 171493 Apr 13 17:32 undo_002.uz
3.2 还原datafile
还原数据库备份之前必须做完成以下前提:
3.2.1 分步还原第一步:apply-log因为在备份期间数据库还在读写,把这期间产生的redolog贴回数据文件上,以达到数据一致性
mysqlbackup --backup-dir=/data/backup/2022-04-13_17-32-49 --uncompress apply-log
第二步:copy-back把已经达到数据一致性的数据文件copy到mysql的datadir目录下,此时不能再用uncompress参数,因此apply-log时已经uncompress过了。
mysqlbackup --datadir=/data/mysql/data --backup-dir=/data/backup/2022-04-13_17-32-49 copy-back
3.2.2 合并还原以上两步可以合为一步完成,即把apply-log与copy-back合并为copy-back-and-apply-log,它首先会把redolog贴回datafile并初始化新的redolog,然后把backupdir目录下的全部数据copy回mysql datadir
mysqlbackup --datadir=/data/mysql/data --backup-dir=/data/backup/2022-04-13_17-32-49 --uncompress --show-progess copy-back-and-apply-log
参数解释:
聪明的你一定发现了,在使用以上两种备份方式进行备份时都加了–compress参数,为什么还原的时候–uncompress参数却是可选项呢?因为mysqlbackup 8.0.21版本开始可以识别备份是否为compress,如果是,那么它在还原时会自动uncompress,不需要显示告诉它。在mysqlbackup 4.X以及8.0.21之前版本是必须要显示指定uncompress的。
4.1 备份datafile
先做全备:
mysqlbackup --user=immeb --password=LaoGeDB123! --socket=/data/mysql/data/mysqld.sock --backup-dir=/data/backup --show-progress --compress --with-timestamp backup
再做增备[方式一]:
mysqlbackup --user=immeb --password=LaoGeDB123! --socket=/data/mysql/data/mysqld.sock --with-timestamp --compress --incremental --incremental-base=dir:/data/backup/2022-04-14_02-09-39 --incremental-backup-dir=/data/backup backup
再做增备[方式二]:
mysqlbackup --user=immeb --password=LaoGeDB123! --socket=/data/mysql/data/mysqld.sock --with-timestamp --compress --incremental --incremental-base=history:last_backup --incremental-backup-dir=/data/backup backup
多个增量备份,只需要多次执行上面的命令即可。
4.2 还原datafile
4.2.1 先把全备apply-log
还原数据库备份之前必须做完成以下前提:
全备apply-log命令:
mysqlbackup --backup-dir=/data/backup/2022-04-14_02-09-39 apply-log
4.2.2 再增备apply-incremental-backup增备apply-incremental-backup命令:
mysqlbackup --incremental-backup-dir=/data/backup/2022-04-14_02-15-27 --backup-dir=/data/backup/2022-04-14_02-09-39 apply-incremental-backup
多个增量还原,只需要多次执行上面的命令即可。注意–incremental-backup-dir每次都要用当前增量备份的目录。
4.2.3 最后将备份copy-back到datadir将备份copy-back到datadir命令:
mysqlbackup --datadir=/data/mysql/data --backup-dir=/data/backup/2022-04-14_02-09-39 copy-back-and-apply-log
还原后,datadir目录下的数据文件用户属组不是mysql,因此要修改其属组,否则mysqld访问无法启动。修改属组命令:
chown mysql.mysql /data/mysql/data -R
启动mysqld服务:
systemctl start mysqld
严谨的朋友已经发现在以上命令中存在安全漏洞:用户名和密码是明文写在命令中的,且命令冗长,不易操作。如何配置能让mysqlbackup更安全呢?将socket、user、password写到my.cnf中,mysqlbackup --defaults-file=/etc/my.cnf方式吗?掩耳盗铃罢了,因为在my.cnf中同样是明文的。这里我们使用mysql_config_editor来处理,既能隐藏密码,又能减少命令复杂度。mysql_config_editor 是什么,读者可以自行查阅官方文档,下面直接上命令:
配置:将mysqlbackup要使用的登录连接信息通过mysql_config_editor加密保存起来:
mysql_config_editor set --login-path=backup --user=immeb --password --socket=/data/mysql/data/mysqld.sockEnter password:##此处输入password后回车
查看:看一看加密保存的信息:
mysql_config_editor print --login-path backup[backup]user = "immeb"password = *****socket = "/data/mysql/data/mysqld.sock"
可以看到,除了保存了user、socket外,还加密保存了密码。
改造:mysqlbackup命令就可以如下改造,直接调用此加密信息:
改造前:
mysqlbackup --user=immeb --password=LaoGeDB123! --socket=/data/mysql/data/mysqld.sock --backup-image=my_full_bak.mbi --backup-dir=/data/backup --show-progress --compress --with-timestamp backup-to-image
改造后:
mysqlbackup --login-path=backup --backup-image=my_full_bak.mbi --backup-dir=/data/backup --show-progress --compress --with-timestamp backup-to-image
通过改造前后对比,安全性与易用性都得到加强。
上面讲解了mysqlbackup的常规用法,其实它还有很多高级功能,比如:
上面就是小居数码小编今天给大家介绍的关于(mysql8备份恢复)的全部内容,希望可以帮助到你,想了解更多关于数码知识的问题,欢迎关注我们,并收藏,转发,分享。
94%的朋友还想知道的:
(521)个朋友认为回复得到帮助。
部分文章信息来源于以及网友投稿,转载请说明出处。
本文标题:MySQL8.0备份与还原工具讲解(mysql8备份恢复):http://sjzlt.cn/shuma/154721.html