• xtrabackup全备 增备


    版本针对mysql8.0版本

    官方下载地址 https://www.percona.com/downloads

    自行选择下载方式

    yum安装方式 

     1、下载上传服务器 安装软件 

    1. [root@master mysql]# ll percona-xtrabackup-80-8.0.33-28.1.el7.x86_64.rpm
    2. -rw-r--r--. 1 root root 44541856 Oct 10 13:25 percona-xtrabackup-80-8.0.33-28.1.el7.x86_64.rpm
    3. [root@master mysql]# yum -y install percona-xtrabackup-80-8.0.33-28.1.el7.x86_64.rpm
    4. [root@master ~]# xtrabackup -version
    5. 2023-10-11T15:13:58.035145+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized server arguments: --datadir=/usr/local/mysql/data
    6. xtrabackup version 8.0.33-28 based on MySQL server 8.0.33 Linux (x86_64) (revision id: b3a3c3dd)
    7. [root@master ~]#

    自行安装mysql 作为测试数据库使用

    或者使用此脚本

    注意 需要修改

    数据库下载地址

    https://downloads.mysql.com/archives/get/p/14/file/mysql-cluster-8.0.33-linux-glibc2.12-x86_64.tar.xz

    tar -xvf /opt/src/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz -C /usr/local/

    要下载mysql软件包 上传到服务器的指定目录

    1. [root@master ~]# cat install_mysql.sh
    2. #!/bin/bash
    3. check_mysql_installed() {
    4. local num=$(pgrep mysqld |wc -l)
    5. if [ $num -eq 2 ]; then
    6. echo "MySQL is already installed."
    7. return 0
    8. else
    9. return 1
    10. fi
    11. }
    12. install_mysql() {
    13. tar -xvf /opt/src/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
    14. cd /usr/local && mv mysql-8.0.33-linux-glibc2.12-x86_64/ mysql/
    15. mkdir -p /var/lib/mysql
    16. mkdir -p /usr/local/mysql/data
    17. mkdir -p /usr/local/mysql/log
    18. groupadd mysql
    19. useradd -r -g mysql mysql
    20. chown -R mysql:mysql /usr/local/mysql
    21. chmod -R 777 /var/lib/mysql/
    22. chown -R mysql:mysql /usr/local/mysql/data
    23. chown -R mysql:mysql /usr/local/mysql/log
    24. chown -R mysql:mysql /var/lib/mysql/mysql.sock
    25. rm -rf /etc/my.cnf
    26. cat > /etc/my.cnf <<EOF
    27. [mysql]
    28. default-character-set=utf8
    29. [mysqld]
    30. lower-case-table-names=1
    31. port=3306
    32. socket=/var/lib/mysql/mysql.sock
    33. basedir=/usr/local/mysql
    34. datadir=/usr/local/mysql/data
    35. max_connections=100000
    36. wait_timeout=3153600
    37. character-set-server=utf8
    38. default-storage-engine=InnoDB
    39. max_allowed_packet=200M
    40. pid-file=/usr/local/mysql/mysqld.pid
    41. log-error=/usr/local/mysql/log/mysqld.log
    42. [client]
    43. port=3306
    44. socket=/var/lib/mysql/mysql.sock
    45. EOF
    46. cd /usr/local/mysql
    47. ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
    48. cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
    49. ln -sv /usr/local/mysql/bin/mysql /usr/bin/mysql
    50. chkconfig --add mysqld
    51. systemctl start mysqld
    52. }
    53. if check_mysql_installed; then
    54. exit 0
    55. else
    56. install_mysql
    57. if check_mysql_installed; then
    58. echo "MySQL installed successfully."
    59. else
    60. echo "Failed to install MySQL."
    61. fi
    62. fi

    数据库默认密码查看 cat tailf /usr/local/mysql/log/mysqld.log

    1、mysql -uroot -p

    输入初始密码

    进入数据库先修改密码,不修改密码不能使用

    alter user "root"@"localhost" identified by '123456';

    表示用户"root"可以从任何主机连接到MySQL数据库,方便我们使用外部工具

    update mysql.user set host="%" where user="root";

    创建一个给备份时候用的数据库

    create user "back"@"%" identified by "123456";

    #这个注意授权的权限我开启的全部,因为是测试环境为了方便,如果是给公司生产上使用,建议还是规范使用授权

    grant all on *.* to "back"@"%";

    FLUSH PRIVILEGES;

    创建数据库就自行创建,使用工具点点就创建了

    =========================================================================

    在开始全量备份前 准备一些测试数据库方便验证

    开始全量备份

    1. # 全量备份数据库 
    2. mkdir -p /backup/full
    3. xtrabackup --backup --target-dir=/backup/full --user=back --password=123456 --host=192.168.25.129 --port=3306
    4. # 备份数据目录
    5. mv /usr/local/mysql/data/ /usr/local/mysql/databak # 重命名表示已备份数据目录
    6. # 停止 MySQL 服务器
    7. systemctl stop mysql
    8. # 创建新的数据目录
    9. mkdir /usr/local/mysql/data/ # 创建新的数据目录以准备恢复
    10. chown -R mysql:mysql /usr/local/mysql/data # 设置目录所有者为MySQL用户
    11. # 准备备份数据
    12. xtrabackup --prepare --apply-log-only --target-dir=/backup/full/
    13. xtrabackup --prepare --target-dir=/backup/full/
    14. # 复制备份数据到新的数据目录
    15. xtrabackup --copy-back --target-dir=/backup/full/
    16. # 设置新的数据目录的权限
    17. chown -R mysql:mysql /usr/local/mysql/data/*
    18. # 启动 MySQL 服务器
    19. systemctl start mysql

     在执行第一步全量备份后把初始数据库的data目录给更改后创建新的空data目录,就是等于把data  给清空

    在执行后面的恢复数据库登录数据库查看还是正常的数据

     

    =========================================================================

    上面是全量的备份、恢复

    增量数据备份 恢复就是在全量备份的基础上继续备份,备份的数据是后续生产的数据

    比如 早上9点全量备份后   增量备份是在下午6点,那么这一次的增量数据就是9点到6点的数据

    上面已经做过全量备份全量备份的目录是在 /backup/full 里面

    开始增量备份前需要数据库在创建一些测试数据经行对比

    自己自行创建创建完成后执行

    1、创建测试数据  执行下面语句

    xtrabackup --backup --target-dir=/backup/inc1 --user=back --password=123456 --host=192.168.25.129 --port=3306 --incremental-basedir=/backup/full

    注意  上下这俩个都是增量备份数据的恢复  一个是inc1  一个是inc2

    inc1数据目录是根据/backup/full 后开始备份

    inc2数据目录是根据/backup/inc1后开始备份

    inc1备份数据  也要和inc2数据有些区别

    这个最后会解释

    2、创建不一样的测试数据  执行下面语句

    xtrabackup --backup --target-dir=/backup/inc2 --user=back --password=123456 --host=192.168.25.129 --port=3306 --incremental-basedir=/backup/inc1

     重复操作删除数据库的data目录

    1. 3、删除data mysql数据库目录
    2. mv /usr/local/mysql/data /usr/local/mysql/data5
    3. 4、创建新的 授权mysql
    4. mkdir /usr/local/mysql/data
    5. chown -R mysql:mysql /usr/local/mysql/data/
    6. # 在备份目录执行以下命令以准备全量备份数据
    7. xtrabackup --prepare --apply-log-only --target-dir=/backup/full/
    8. # 接下来,添加第一个增量备份
    9. xtrabackup --prepare --apply-log-only --target-dir=/backup/full/ --incremental-dir=/backup/inc1/
    10. # 如果有第二个增量备份,也可以添加它
    11. xtrabackup --prepare --apply-log-only --target-dir=/backup/full/ --incremental-dir=/backup/inc2/
    12. # 最后的准备,这会完成整个数据库恢复
    13. xtrabackup --prepare --target-dir=/backup/full/
    14. # 将数据拷贝回MySQL数据目录
    15. xtrabackup --copy-back --target-dir=/backup/full/
    16. # 修改MySQL数据目录的所有者,以确保MySQL可以访问
    17. chown -R mysql:mysql /usr/local/mysql/data/*
    18. # 重新启动MySQL服务以加载恢复后的数据
    19. systemctl restart mysqld

    查看是否恢复了全部数据

    上面是完整的使用操作,有问题留言

    注意: 每次备份在备份数据库的目录下都有xtrabackup_checkpoints文件 

    这是我的三个

    1. cat /backup/full/xtrabackup_checkpoints
    2. [root@master ~]# cat /backup/full/xtrabackup_checkpoints
    3. backup_type = full-prepared
    4. from_lsn = 0
    5. to_lsn = 19679426
    6. last_lsn = 19679426
    7. flushed_lsn = 19679426
    8. redo_memory = 0
    9. redo_frames = 0
    10. [root@master ~]# cat /backup/inc1/xtrabackup_checkpoints
    11. backup_type = incremental
    12. from_lsn = 19639598
    13. to_lsn = 19653067
    14. last_lsn = 19653067
    15. flushed_lsn = 19653067
    16. redo_memory = 0
    17. redo_frames = 0
    18. [root@master ~]# cat /backup/inc2/xtrabackup_checkpoints
    19. backup_type = incremental
    20. from_lsn = 19653067
    21. to_lsn = 19679426
    22. last_lsn = 19679426
    23. flushed_lsn = 19679426
    24. redo_memory = 0
    25. redo_frames = 0


    [root@master ~]#

    备份的 开始是 LSN(from_lsn )

    结束是 LSN(to_lsn),

    from_lsn 应该等于上一步备份的 to_lsn

    要保证 inc1的to_lsn是19653067    inc2的from_lsn是 19653067

    所以每次增量都是从上次一的尾开始到第一次的头结束

    不然会有这个报错

    1. 2023-10-11T14:20:41.209319+08:00 0 [ERROR] [MY-011825] [Xtrabackup] This incremental backup seems not to be proper for the target.
    2. 2023-10-11T14:20:41.209325+08:00 0 [ERROR] [MY-011825] [Xtrabackup] Check 'to_lsn' of the target and 'from_lsn' of the incremental.

    生产环境使用脚本 比如 每8天晚上11点经行一次全量备份   每个3天的晚上11一次增备份

    主备份可以每次生成一个时间戳文件,检测/back下面的文件删除30天之前文件,增倍目录也是一样的操作

    /back/时间戳

    增备份一个目录

     

     

  • 相关阅读:
    QT+Python人脸表情特征识别
    vue3实现H5网页录音并上传(mp3、wav)兼容Android、iOS和PC端
    深入理解nginx一致性哈希负载均衡模块[上]
    Http状态码502常见原因及排错思路(实战)
    Delphi 论文阅读 Delphi: A Cryptographic Inference Service for Neural Networks
    TikTok社交心理学:短视频如何连接人心
    【REGEXP】【正则的使用】【正则的使用】
    JavaSE类和对象
    看门狗 WDG
    360 G800行车记录仪,不使用降压线如何开机,8芯插头的定义。
  • 原文地址:https://blog.csdn.net/m0_52454621/article/details/133770848