最近遇到 mysql的相关问题总结

先交代背景:
ubuntu-22.04
mysql 8.0.31
我想把mysql重装一下,原因如下,在csdn提了问题,但还没人搭理我:

各位大佬,我遇到一个mysql 8.0.31的问题,求指点

SQL 错误 [1812] [HY000]: Tablespace is missing for table xxx/yyy.

服务器磁盘坏道,有个表ibd文件没了,也没有备份。因为是测试数据库,
现在的问题是,我对这个表做任何操作,都会提示Tablespace is missing for table
包括 alter table ,drop table 等待,也不能discard tablespace,但我还想保留这个表名,实在没辙了···

查了很多,mysql官方bug网站,http://dba.stackexchange.com/等。都没结果。

所以我想把mysql重装一下:
先备份:

-R, --routines      Dump stored routines (functions and procedures).
-E, --events        Dump events.
# 导出 
# -R 导出存储过程
# -E 导出事件
mysqldump -uroot -proot --all-databases --ignore-table=xxx.yyy -R -E > alldb.sql
mysqldump -uroot -proot xxx --ignore-table=xxx.yyy > xxx.sql

# 导入
mysql -uroot -proot < /root/alldb.sql
# 或者进入mysql命令行然后source
source /root/alldb.sql

再说下mysql 默认的目录结构

/var/lib/mysql  数据目录
/var/log/mysql  日志目录
/etc/mysql   配置文件目录
/var/run/mysql 可执行文件

卸载安装:

卸载mysql:
sudo apt-get remove mysql-* //卸载
sudo apt autoremove --purge mysql-\*   // 卸载相关依赖,谨慎
dpkg -l |grep ^rc|awk{print $2}|sudo xargs dpkg -P //清除所有已删除包的残馀配置文件

记得把/var/lib/mysql  删了,因为默认不会删除的
rm -rf /var/lib/mysql

安装mysql:
apt-get install mysql-server

这里我测试了一下,如果只是apt-get remove mysql-* 卸载,不删除数据目录,那么install后,还能进mysql,还有那么多数据库,卸载了个寂寞,所以至少要把/var/lib/mysql删了,配置目录倒是可以留着。

还有个问题,有时候卸载的时候会提示

无法定位软件包 mysql-backup
E: Unable to locate package mysql-backup

首先,我也不知道mysql-backup 是什么鬼,但我用命令:
apt list --installed | grep mysql
查询已安装的软件,是没找到mysql-backup的,而且神奇的是apt list mysql* 查不到任何软件。

root@swarm-manager:~# apt list --installed | grep mysql

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

mysql-client-8.0/focal-security,now 8.0.31-0ubuntu0.20.04.1 amd64 [已安装,自动]
mysql-client-core-8.0/focal-security,now 8.0.31-0ubuntu0.20.04.1 amd64 [已安装,自动]
mysql-common/focal,focal,now 5.8+1.0.5ubuntu2 all [已安装,自动]
mysql-server-8.0/focal-security,now 8.0.31-0ubuntu0.20.04.1 amd64 [已安装,自动]
mysql-server-core-8.0/focal-security,now 8.0.31-0ubuntu0.20.04.1 amd64 [已安装,自动]
mysql-server/focal-security,focal-security,now 8.0.31-0ubuntu0.20.04.1 all [已安装]
root@swarm-manager:~# apt list mysql*
正在列表... 完成
root@swarm-manager:~#

可能apt list 不支持*这样的模糊查询吧,总之,最后的解决办法是挨个卸载。

apt remove mysql-client-8.0 mysql-client-core-8.0 mysql-common mysql-server-8.0 mysql-server-core-8.0 mysql-server

再说一个坑,mysql无法远程访问,不但要设置用户的host为%。例如,如果你是root用户。

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; #使用mysql_native_password修改加密规则
ALTER USER 'root'@'%' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER; #更新一下用户的密码
UPDATE user SET host = '%' WHERE user = 'root'; #允许远程访问(其实还要修改配置文件)

最后一行,更新时如果遇到
Duplicate entry '%-root' for key 'PRIMARY'

说明有多个root用户,可能对应不同的host,那这个错误就不用管了。select host,user,plugin from user;

再如果没有root@%的用户,就创建一个

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; 
mysql> FLUSH PRIVILEGES;

还远程访问不了,那就是mysql的配置问题了,别的版本我不知道,但mysql 8.0.31的是这样:

// 修改以下文件,注释掉bind-address		= 127.0.0.1
/etc/mysql/mysql.conf.d/mysqld.cnf 

你可能感兴趣的:(运维,mysql,数据库)