我不得不在 Proxmox 中重做我的服务器 (Debian 9)。我更新了一个包 (libc6),并破坏了依赖关系(我没有对它进行快照……)。受影响的守护进程之一是 MySQL / MariaDB,我无法从 PhpMyAdmin 进行备份,因为守护进程不工作,我无法连接到数据库。
现在我已经安装了 Debian 10,但是在从另一台机器恢复数据库时遇到了问题。
mysqldump: Couldn't execute 'show create table `xxx.yyy`': Table 'yyy' doesn't exist in engine (1932)
我尝试以下解决方案时提示以下错误:
root@debian:~# mysqldump -u root -p --all-databases > all_databases.sql
Enter password:
mysqldump: Got error: 1932: "Table 'mysql.gtid_slave_pos' doesn't exist in engine" when using LOCK TABLES
root@debian:~# mysqldump --skip-lock-tables -u root -p --all-databases > all_databases.sql
Enter password:
mysqldump: Couldn't execute 'show create table `gtid_slave_pos`': Table 'mysql.gtid_slave_pos' doesn't exist in engine (1932)
root@debian:~# mysqlfrm --server=xxx:yyy@localhost:3306 test.frm --port=3310
WARNING: Using a password on the command line interface can be insecure.
# Source on localhost: ...
Usage: mysqlfrm --server=[user[:<pass>]@host[:<port>][:<socket>]|<login-path>[:<port>][:<socket>]] [path\tbl1.frm|db:tbl.frm]
mysqlfrm: error: Can't connect to MySQL server on 'localhost:3306' (111 Connection refused)
来源: https://dba.stackexchange.com/a/127813
MariaDB [(none)]> ALTER TABLE mysql.gtid_slave_pos DISCARD TABLESPACE;
ERROR 1932 (42S02): Table 'mysql.gtid_slave_pos' doesn't exist in engine
来源: https://stackoverflow.com/questions/51997127/restore-mysql-database-using-only-frm-and-ibd-files
我将尝试回答一些有人已经问过我的相关问题。
- 我怎么会陷入这种状态?
我并不完全清楚,但我认为在我尝试了几种解决方案,降级 libc6 或尝试让 mariadb 再次运行,并尝试重新启动 mysqld/mariadb 服务几次后,MySQL 被破坏了。
- Debian 9 中的 MySQL/MariaDB 版本是什么?
mariadb Ver 15.1 Distrib 10.1.44-MariaDB,适用于 debian-linux-gnu (x86_64),使用 readline 5.2
- Debian 10 中的版本是什么?
mariadb Ver 15.1 Distrib 10.3.22-MariaDB,适用于 debian-linux-gnu (x86_64),使用 readline 5.2
- 我是否将整个数据目录从一个复制到另一个?
不,我没有尝试过……但我在 stackoverflow 网站和谷歌上都找不到任何有用的东西。也许我会尝试研究以下信息(我稍后会编辑这个问题),但如果能看到与此相关的答案就太好了。
- 我运行了 mysql_upgrade 吗?
不,我没有尝试过在 Debian 9 中更新 mariadb 可能是一个可行的解决方案。但是查看 Debian 9 的软件包时,我没有找到适用于 Debian 9 的 mariadb 10.3 版本(clib6 2.30-10 需要的版本,我使用的是 2.14)。
您能否对服务器中的其他数据库(即不是名为 mysql 的数据库)进行 mysqldump?
是的,我备份了一些数据库,但无法备份所有数据库(10 个中只有 3 个或 4 个)。
还有其他选择吗?