最近遇到 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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用C++与MySQL建立连接时,可能会遇到以下一些常见问题: 1. 编译器提示找不到mysql.h文件 这是由于编译器无法找到MySQL头文件的路径导致的。需要在编译器中添加MySQL的头文件路径,例如: ```c++ #include <mysql.h> //MySQL头文件 ``` 2. 编译器提示找不到libmysql.dll或libmysql.lib文件 这是由于编译器无法找到MySQL库文件的路径导致的。需要在编译器中添加MySQL的库文件路径,并在连接时指定MySQL的库文件,例如: ```c++ #pragma comment(lib, "libmysql.lib") //连接MySQL库文件 ``` 3. 连接MySQL服务器失败 连接MySQL服务器失败可能是由于以下原因: - MySQL服务器地址或端口号不正确 - 用户名或密码不正确 - MySQL服务器没有启动 - 防火墙阻止连接 需要检查以上原因并进行相应的调整。 4. 执行SQL语句失败 执行SQL语句失败可能是由于以下原因: - SQL语句语法错误 - 操作的表或字段不存在 - 操作的表或字段没有权限 - 数据类型不匹配 需要检查以上原因并进行相应的调整。 5. 内存泄漏或崩溃 在使用C++与MySQL建立连接时,如果没有正确地释放内存,可能会导致内存泄漏或程序崩溃。需要在程序中正确地释放内存,例如: ```c++ mysql_free_result(res); //释放查询结果内存 mysql_close(conn); //关闭MySQL连接 ``` 以上是在使用C++与MySQL建立连接时可能会遇到的一些常见问题和解决方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值