MySQL 8.0.11 innodb cluster 运维管理手册之四-msyqlbackup备份

MySQL 8.0.11 innodb cluster 运维管理手册之四-msyqlbackup备份

作者 方连超

Mysqlbackup 介绍

mysqlbackup是一个热备份工具、也就是说它不像mysqldump那样给表上一个全局锁,由于mysqldump上了这个锁,所以就造成客户端只能对数据库进行读操作不能写,这也就是称mysqldump为温备份的原因。但是mysqlbackup真的有这么吊吗?答案是并没有。对于innodb引擎的表mysqlbackup 热备的;但是对于非innodb表mysqlbackup就只能温备了,原因是这类引擎不支持事务也就是说不能通过事务日志来保证备份的一致性,所以就只能给表加上一个全局锁来解决了。为了得到一致的备份mysqlbackup要不停的去追踪mysql数据库的sln号,也就是说mysqlbackup要执行备份那么它一定要连接上数据库。mysqlbackup对数据库的备份是通过复制文件的方式进行的,也就是说mysqlbackup要和数据库在同一台机器上,和xtrabackup 很相似的。

安装 mysqlbackup

Mysqlbackup 是企业版mysql中的,但可以拿来使用,登录oracle云下载,搜索mysql backup,下载二进制文件
mysql-commercial-backup-8.0.11-linux-glibc2.12-x86_64.tar.gz
传到主机上并解压,
会有 bin 和lib 文件夹,将其中的文件拷贝到 /usr/local/mysql 对应的目录中, 这里要把 软连接,库全部拷贝的,不然会报错

备份用户

(官方指导命令)

CREATE USER 'backup'@'localhost' IDENTIFIED BY '$$$$$$$$$$$$$$';
GRANT RELOAD ON *.* TO 'backup'@'localhost';
GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_progress TO 'backup'@'localhost';
GRANT CREATE, INSERT, SELECT, DROP, UPDATE ON mysql.backup_history TO 'backup'@'localhost';
GRANT REPLICATION CLIENT ON *.* TO 'backup'@'localhost';
GRANT SUPER ON *.* TO 'backup'@'localhost';
GRANT PROCESS ON *.* TO 'backup'@'localhost';
GRANT ALTER ON mysql.backup_history TO 'backup'@'localhost';  #此表在主库上备份才会生成和写入
GRANT LOCK TABLES, SELECT, CREATE, DROP, FILE ON *.* TO 'backup'@'localhost';
GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_sbt_history TO 'backup'@'localhost';#此表仅在主库上有效

全量备份

##备份到/fullbak/2018-10-10_19-19-11/datadir 类似这样的目录中
mysqlbackup --backup-dir=/data/backup/fullbak --host=127.0.0.1 --port=3306 --user=backup --password=$$$$$$$$ --with-timestamp backup
##############备份到/fullbak/2018-10-10_19-19-11/full_backup.bki 这样一个单文件中,以后不用备份单文件,我们自己压缩备份更小
mysqlbackup --backup-dir=/data/backup/fullbak --host=127.0.0.1 --port=3306 --user=backup --password=$$$$$$$$$$$ --backup-image=full_backup.bki  --with-timestamp backup-to-image

    --user:用户名。
    --password:密码。
    --port:端口,默认值为3306。
    --backup-dir:可以看成是mysqlback的工作目录,临时用的。
    --backup-image:备份文件名,这个是最终要的文件,别的都可以不要。位置可以不带路径,默认放到 backup-dir
    backup-to-image:把所有的备份信息输出到一个备份文件当中
--with-timepstap: 会自动生成一个带日期文件夹,这里放的是备份时用的临时文件和最后的备份镜像(不指定镜像位置的化)

增量备份

实际证明,单文件备份是无法进行恢复的,下面这个例子放弃
mysqlbackup --backup-dir=/data/backup --host=127.0.0.1 --port=3306 --user=backup --password=Qs3ce3saadr37tpP --incremental-with-redo-log-only --incremental-base=history:last_backup --with-timestamp --backup-image=incre_backup.bki backup-to-image

不备份成单个文件,增量备份貌似也不支持,这个是可以进行恢复的 指定了备份到的增量目录和增量的基源

mysqlbackup --incremental-backup-dir=/data/backup/increbak --host=127.0.0.1 --port=3306 --user=backup --password=Qs3ce3saadr37tpP --incremental  --incremental-base=history:last_backup --with-timestamp   --backup-image=incre_backup.bki backup

一定要先执行上面的全备, last_backup 这个备份参数会在数据库中找,然而,这个备份要在主库进行,不能再从库,因为从库不写备份信息。

跨主机远程备份

#########备份到其他服务器
The following command streams the backup as a single-file output to a remote host to be saved under
the file name my_backup.img (--backup-dir=/tmp designates the directory for storing temporary files
rather than the final output file):

mysqlbackup --defaults-file=~/my_backup.cnf --backup-image=- --backup-dir=/tmp backup-to-image | \
ssh <user name>@<remote host name> 'cat > ~/backups/my_backup.img'

猜你喜欢

转载自blog.51cto.com/yunfang/2151101
今日推荐