Mariadb意外崩溃数据恢复

1.事故还原

优于同时在多个终端执行select、insert和delete操作,数据库意外崩溃

2.数据恢复

2.1 尝试重新启动

执行service mysqld restart发现数据库报错,无法启动

2.2 进入恢复模式

当发现数据无法启动后,尝试进入恢复模式,vi /etc/my.cnf

在配置文件中[mysqld]部分增加以下内容

[mysqld]
innodb_force_recovery=1
innodb_purge_thread=0

然后执行service mysqld restart重启数据库,如果继续失败则将innodb_force_recovery的值修改为2,其中innodb_force_recovery分为0-6这七个等级,可用逐个尝试,直至数据重新启动

2.3 备份数据

使用 mysqldump备份数据库

以我的情况为例

> mysqldump -uroot -p --databases am_sma_third > /home/sma/backup/am_sma_third_20210903.sql

2.4 初始化数据库

初始化之前,为防止意外,将旧的数据库文件备份一下,文件位置可以从配置文件my.cnf查看

[mysqld]
datadir=/home/mysql/datadir
socket=/home/mysql/datadir/mysql.sock

其中datadir便是文件位置,进行备份

> cd /home/mysql
> mkdir datadirbak && mkdir datadirbak/20210903
> mv datadir/* datadirbak/20210903/

备份完成后,初始化数据库

> mysql_install_db --user=mysql --basedir=/usr --datadir=/home/mysql/datadir/

对文件夹重新授权,防止意外

> chown -R mysql:mysql /home/mysql 

注释掉恢复模式

[mysqld]
# innodb_force_recovery=1
# innodb_purge_thread=0

重启数据库

> service mysqld restart

2.5 恢复数据

登陆到数据库

> mysql -uroot -p

利用source命令恢复数据,以我的sm_sma_third库为例

mysql> create database sm_sma_third;
mysql> source /home/sma/backup/sm_sma_third_20210903.sql

等待恢复完成,重新对用户进行授权即可。