工作笔记 · 2025年1月8日 0

全量恢复mysql5.6版本数据库

从阿里云备份下载的tar文件13g左右,但是解压恢复需要大约200G空间空余磁盘空间,建议300G

虚拟机磁盘扩容

关机修改磁盘配置

启动后

fdisk -l 查看当前磁盘卷标 /dev/sda 总容量,列出的已经创建好的磁盘

fdisk /dev/sda

n —create volume

一路默认即可

w —save 当前新建的卷—-这个之前不知道

q—退出

fdisk -l 查看新增的 磁盘 (有点遗忘,好像需要重启)

会多出来一个 /dev/sda3(如果原本有了 sda1 and sda2)

mkfs.ext4 /dev/sda3 格式化 –如果失败 可以输入 partprobe /dev/sda

根目录 新增一个目录 mkdir /data

mount /dev/sda3 /data

修改 /etc/fstab 便于重启服务器也能自动挂载

reboot—可不用立刻重启

安装Mysql5.6 —-参考 oracle 官网文档 –只是为了便于查看

vim /etc/yum.repo.d/mysql56.repo

# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/
enabled=1
gpgcheck=0  ###官网是1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

yum clean packages

yum repolist enabled | grep mysql

sudo yum install mysql-community-server

sudo service mysqld start

5.6安装后root密码为空 其他版本不是空, 如果不是 sudo grep ‘temporary password’ /var/log/mysqld.log

#>mysql -u root -p 
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('your_new_password');

sudo service mysqld stop

下载–上传到服务器

恢复数据库–大部分参考阿里云的帮助文档即可

tar -izxvf test.tar.gz -C /var/mysql_bkdata/

停止当前 mysqld服务 ,service mysqld stop

安装工具

wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.28/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.28-1.el7.x86_64.rpm

sudo yum localinstall -y percona-xtrabackup-24-2.4.28-1.el7.x86_64.rpm
wget "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20230406/flxd/qpress-11-linux-x64.tar"

tar -xvf qpress-11-linux-x64.tar && sudo chmod 775 qpress && sudo cp qpress /usr/bin
innobackupex --defaults-file=/data/bakdata/backup-my.cnf --apply-log /data/bakdata

mkdir /data/newdata
chown -R mysql:mysql /data/newdata

vim /etc/my.cnf

datadir = /data/newdata
innodb_undo_tablespaces=0 ---from backup-my.cnf
innodb_log_file_size=1048576000 ---from backup-my.cnf

修改后执行下面的命令,会自动创建一个new_data

下面的步骤执行后,会遇到启动mysqld失败情况,所以做了个虚拟机的快照


sudo innobackupex --defaults-file=/etc/my.cnf --copy-back /data/bakdata/
exit

上面的操作,尝试过 新建一个新的os,mysql ,,还是不行,,懒得研究了,采用手工备份 单个数据库,然后下载恢复到本地服务器的 数据库

dump 备份还原模式

在生产环境,用mysql client 连接,mysqldump 创建备份文件

mysqldump -u ddd -p –set-gtid-purged=OFF databasename > /ddd/ddd/database.sql

备份的sql文件过大 有 16G,恢复的时候提示

ERROR 2006 (HY000) at line 2986: MySQL server has gone away

解决方法

  • 调整 MySQL 服务器的参数
    • 增加wait_timeoutinteractive_timeout的值
      • 这些参数控制着 MySQL 服务器在无操作情况下保持连接的时间。可以通过修改 MySQL 配置文件(通常是my.cnfmy.ini)来增加这些参数的值。例如:
  • [mysqld] wait_timeout = 28800 interactive_timeout = 28800 –8小时 restart mysqld

[root@localhost dumpdata]# mysql -u root -p –max_allowed_packet=512M sdarp < /data/dumpdata/sdarp.sql

经历过几次测试,大型备份的文件还原始终报错,于是采用 navicat 的备份还原机制

navicat 备份还原机制

这个机制麻烦的地方只能一次只能备份一个数据库,阻塞式,无法多线程\

在windows中 的navicat 选择生产的 数据库 备份 然后 用 ctrl+c ,,到 目标数据库库 ctrl+v

这个navicat备份也会存在数据量过大,备份超时的问题,所以只能选择先把明确知道大数据量的备份,然后还原到本地后,删除生产备份过大的–一般都是日志表数据—再次备份

这个备份还原机制还是过于简陋,不适合大规模操作

所以这次实验还没有结束

如何确定 阿里云的 rds的 mysql 5.6版本备份后正确的还原到 本地库,,并且 要观察 过大备份文件的问题

小型的文件目前还原的比较顺利.