最近遇到 mysql的相关问题总结
先交代背景: ubuntu-22.04 mysql 8.0.31 我想把mysql重装一下,原因如下,在提了问题,但还没人搭理我:
各位大佬,我遇到一个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