我们mysql可能会不知道什么原因就挂了,无法启动,如果你尝试任何操作都无法重新启动的时候就可以从旧的数据库恢复数据。
还可以从binlog日志文件恢复数据,前提是你能进入mysql,参考文章:http://t.csdnimg.cn/vs7Kj
1.从data文件恢复数据
1.备份旧的data文件夹
用xtfp从服务器把数据库的数据文件data全部备份下来
2.重装mysql数据库
最好是相同版本的数据库
参考重装数据库博客链接:http://t.csdnimg.cn/xgKOh
进入新的mysql的存放数据的data目录,也可能不叫data名称自己设置的
3.迁移旧文件
通过xtfp来把ibdata1,ib_logfile0,ib_logfile1,ib_buffer_pool,auto.cnf, mysql.ibd这六个旧mysql数据库data的文件覆盖进新的mysql数据库data文件中
然后启动数据库,你会发现在密码验证阶段明明是你的密码却显示密码错误,因为mysql8把密码放在了上面6个文件中的其中一个,所以你要用旧数据库的密码才能进入mysql。
密码忘记可以参考这篇文章来重置密码:http://t.csdnimg.cn/FtMx2
4.查表报 Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)错误
成功进入后你发现数据库和表都存在但是却报错
你查看日志文件说你的ibd表损坏,其实并没有损坏(前提你数据库不是data目录被攻击损坏而启动不了的情况),你看看报错的socker位置是不是你mysql启动时产生的socker文件位置,如果不是在配置文件/etc/my.cnf中修改
[root@makabaka mysql]# cat /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /usr/local/mysql/data/mysql.sock
log-error=/usr/local/mysql/data/mysql.err
port = 3307
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
character-set-server = UTF8MB4
[client]
socket =/usr/local/mysql/data/mysql.sock
default-character-set = UTF8MB4
在上面的配置文件的client下面的socket改为和上面的一样,没有上面的socker的话,应该在/run/mysqld文件中,改到socket位置就行了
改完后重启数据库来刷新配置,一定要刷新!!!
然后你继续查表大概率还是会报相同的错误,你看看mysql的错误日志,发现什么什么权限不足,这时候你只要把data目录下所有文件的访问权限改到777,在xtfp选中右键然后改成777就行了,或者用命令chmod -R 777 /usr/local/mysql/data来修改
chmod -R 777 /usr/local/mysql/data
然后重启数据库,查表
大功告成!
下面我就说一下这个过程中遇到的各种报错以及如何解决
2.解决ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
如果这个错误后面紧跟着是我上面那个报错的话按照我上面解决就行了
单单是这个报错的话可能是允许数据量太少
参考这篇文章:http://t.csdnimg.cn/Jffnt
3.解决ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/local/mysql
发生这种错误说明密码验证方式不同,mysql8默认是caching_sha2_password身份验证插件,mysql5.7以前是mysql_native_password,这时候进入/etc/my.cnf在[mysqld]下面添加skip-grant-tables,这个是调过密码验证进入mysql,这个模式下不能使用alter命令。
#查看mysql版本
select @@version;
#查看加密方式
show variables like 'default_authentication_plugin';
#查看用户信息
select host,user,plugin from mysql.user;
查看自己的加密方式以及用户信息是不是mysql_native_password,不是的话改为mysql_native_password,
#所有用户认证方式修改为mysql_native_password
UPDATE mysql.user SET plugin = 'mysql_native_password';
#修改全局的密码验证方式
SET GLOBAL default_authentication_plugin = 'mysql_native_password';
或者在my.cnf中添加一行
default_authentication_plugin=mysql_native_password
将全局改为mysql_native_password的验证方式
如果还不行的话建议重装数据库了或者自己下载caching_sha2_password身份验证插件放在指定位置,使用–pluggin-dir参数指定插件位置。
4.启动数据库遇到Starting MySQL.The server quit without updating PID file (/[FAILED]l/mysql-8.0.26/data/hcss-ecs-4e53.pid).
这个报错是找不到/mysql-8.0.26/data/hcss-ecs-4e53.pid这个文件,可能你/mysql-8.0.26/data/这几根文件都没有,这个可能是用了旧数据库的配置没更新过来,这时候你会发现都没启动数据库拿来的pid文件,你要进入mysql.service文件还是/usr/local/mysql/support-files/mysql.server文件自己找一下,里面有很多配置信息,把pid-path也就是pid的路径,改成自己在my.cnf设置的pid路径。找不到pid路径可以去run/mysqld目录下面找默认放在这里,不然就是自己指定位置了。