实战mysql大数据库备份60g数据消耗20分钟备份完成,压缩后约7g。

第1步:基本说明

        如果备份的数据库非常大,比如几十G,还包含大量的富文本内容等,因此选择在服务器端备份完成后在下载到本地。

        当然如果你的服务器带宽及性能非常好,也可以在本地远程备份,前提是你本地是Linux系统,因为mydumper只支持Linux环境。

        如果备份大数据库,不建议选择Navicat、mysqlbench等。

        值得提示的是,mydumper是基于快照备份,因此备份过程中可以进行业务查询和插入、修改、删除操作不受影响,建议最好不要操作等待备份完成后在操作。

第2步:下载安装

   下载mydumper:wget https://github.com/maxbube/mydumper/releases/download/v0.14.5-3/mydumper-0.14.5-3-zstd.el7.x86_64.rpm

     当然你也可以在本地下载完成后上传到服务器上进行安装。因为有时github访问慢或无法访问导致动态下载失败。

        centos安装命令:yum install -y mydumper-0.14.5-3-zstd.el7.x86_64.rpm

第3步:辅助命令

        (1).查看数据库大小,清楚大概总量情况:

        SELECT table_schema AS '数据库名称', ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS 'GB'  FROM information_schema.tables   WHERE table_schema = '数据库名称'   GROUP BY table_schema;

       (2).列罗出数据库中所有表大小并排序显示,找到大表,方便后续大表单独备份

   SELECT 
    table_name AS '表名',
    ROUND(data_length / 1024 / 1024, 2) AS '数据大小(MB)',
    ROUND(index_length / 1024 / 1024, 2) AS '索引大小(MB)',
    ROUND((data_length + index_length) / 1024 / 1024, 2) AS '总大小(MB)',
    table_rows AS '预估行数'
FROM 
    information_schema.tables 
WHERE 
    table_schema = '数据库名称'
ORDER BY 
    (data_length + index_length) DESC;

       (3).执行备份命令报错mysql.sock找不到,则将mysql.sock复制到指定目录:

                 ln -s /usr/local/mysql/mysql.sock /var/lib/mysql/mysql.sock

      (4).监控备份状态命令,主要观察服务器性能是否在消耗,判断是否在备份:top

      (5).查看磁盘使用情况命令,主要观察磁盘是否有变化,判断是否在备份:df -h

      (6).磁盘状态实时监控,判断是否在备份:iostat -x 1

      (7).查看备份进度或备份大小,这个命令非常重要,你可以时不时看看备份的size情况:

            ls -lhS /usr/local/dump_full/ | head -n 10

       (8).这是个mysql命令,执行命令看看 mydumper 是不是卡在某个查询上,是否在工作,在初期阶段,这个命令非常重要,防止误以为备份卡主或失败:

           SHOW PROCESSLIST;

      (9).设置IP访问数据库权限,这是mysql命令:

        CREATE USER 'root'@'localhost' IDENTIFIED BY '数据库密码';
        GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
        FLUSH PRIVILEGES;

        如果无法创建,则删除后在重新创建:

       DROP USER IF EXISTS 'root'@'localhost';
        FLUSH PRIVILEGES;

第4步:开始备份

 值得说明的是:如果存在很大的大表一定要分开备份,如果一次全量备份可能会导致中断甚至备份很慢。

(1).用于高性能服务器配置命令 (如果存在大表不建议用这个备份,不过可以尝试下)

mydumper -u root -p 数据库密码 \
  -h 127.0.0.1 \
  -P 数据库端口 \
  -B 数据库名称\
  -t 4 \    #### 使用进程数量,如果服务器性能差,比如机械盘,则改为2
  --compress \
  --triggers \
  --routines \
  --events \
  --less-locking \
  --skip-tz-utc \
  --chunk-filesize 256 \    ####分片默认256M,方便备份和还原
  -l 60 -K \
  --outputdir /usr/local/data_dump      ####备份目录

(2).单独备份大表(主要指单表超过10G)(优先选择)

mydumper -u root -p 数据库密码 -h 127.0.0.1 -P 数据库端口 \
  -B 数据库名称 -T 数据库名称. \
数据表名称  -t 1 --compress --less-locking --skip-tz-utc \
  --chunk-filesize 128 -l 3600 \
  -L /usr/local/mydumper.log -v 4 \
  --outputdir /usr/local/dump_detail

(3).排除大表全量备份

mydumper -u root -p 数据库密码 -h 127.0.0.1 -P 数据库端口 \
  -B 数据表名称 \
  -t 4 --compress --less-locking --skip-tz-utc \
  --chunk-filesize 256 -l 3600 \
  -L /usr/local/newdir/mydumper_full.log -v 3 \
  --regex '^(?!(数据表名称\.大表名称))' \
  --outputdir /usr/local/newdir/dump_full

(4).分别查看备份后的切片,另外备份完成后mydumper进程会自动结束

 ls -lht /usr/local/newdir/dump_detail/

 ls -lht /usr/local/newdir/dump_full/

(6).分别压缩后用xftp下载到本地

tar -czvf /usr/local dump_full.tar.gz -C /usr/local dump_full

tar -czvf /usr/local dump_details.tar.gz -C /usr/local dump_detail

第5步:数据库还原(希望你永远都用不上)

myloader \
  -u root -p '数据库密码' \
  -h 127.0.0.1 \
  -P 数据库端口\
  -B 数据库名称\
  -t 4 \
  -v 3 \
  -o \
  --skip-tz-utc \
  --directory /usr/local/dump

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐