mariadb 从备份中删除名称中带有特殊字符“#”的“伪”sql数据库会导致“数据库名称不正确”错误

enyaitl3  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(33)

我的MariaDB SQL服务器错误地创建了一个带有#字符的数据库:

MariaDB [(none)]> show databases;
+---------------------------------------+
| Database                              |
+---------------------------------------+
| #mysql50#_backup-nextcloud-11.05.2023 |

字符串
这会阻止mysql_upgrade升级我的数据库:

root@0900328dd668:/# mysql_upgrade -u root -p$MYSQL_ROOT_PASSWORD
Major version upgrade detected from 10.3.11-MariaDB to 10.5.22-MariaDB. Check required!
Phase 1/7: Checking and upgrading mysql database
Processing databases
mysql
mysql.column_stats                                 OK
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.event                                        OK
mysql.func                                         OK
mysql.gtid_slave_pos                               OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.host                                         OK
mysql.index_stats                                  OK
mysql.innodb_index_stats                           OK
mysql.innodb_table_stats                           OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.roles_mapping                                OK
mysql.servers                                      OK
mysql.table_stats                                  OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.transaction_registry                         OK
mysql.user                                         OK
Phase 2/7: Installing used storage engines... Skipped
Phase 3/7: Fixing views
mariadb-check: Got error: 1102: Incorrect database name '#mysql50#_backup-nextcloud-11.05.2023' when selecting the database
FATAL ERROR: Upgrade failed


所以我尝试使用CLI删除它,即使使用反引号也不起作用:

MariaDB [(none)]> drop database `#mysql50#_backup-nextcloud-11.05.2023`;
ERROR 1102 (42000): Incorrect database name '#mysql50#_backup-nextcloud-11.05.2023'


使用DBeaver,它生成

DROP SCHEMA `#mysql50#_backup-nextcloud-11.05.2023`;


这也会导致同样的错误。所以我尝试搜索Docker容器中的data目录:

root@0900328dd668:/# find /var/lib/mysql -name \*backup\*
/var/lib/mysql/_backup-nextcloud-11.05.2023


它包含一个SQL文件,没有命名任何数据库名称(它是一个mysql转储)。看起来MariaDB自动创建了这个#mysql50#_backup-nextcloud-11.05.2023数据库,因为我错误地将.sql备份放在了它的数据目录/var/lib/mysql中。然而,它似乎没有 * 注册 *,因为它不可能使用SQL查询删除它。
我可以删除/var/lib/mysql/_backup-nextcloud-11.05.2023/nextcloud.sql来摆脱#mysql50#_backup-nextcloud-11.05.2023数据库吗?或者删除这个 * 伪 * 数据库的安全方法是什么?

py49o6xq

py49o6xq1#

我可以通过停止容器来删除 *pseudo数据库 *,导航到我的docker卷的目录并删除目录,这将是容器内的/var/lib/mysql/_backup-nextcloud-11.05.2023

rm -rf $volume_path/_backup-nextcloud-11.05.2023

字符串
在我的例子中,我已经将Docker根目录移动到用于VM和容器的外部SSD

docker info | grep "Root Dir"
 Docker Root Dir: /vms/docker-lib


所以完整路径应该是/vms/docker-lib/volumes/mariadb_mysql-data/_data/。默认值与Ubuntu上的/var/lib/docker不同:

docker info | grep "Root Dir"
 Docker Root Dir: /var/lib/docker


再次启动MariaDB容器后,#mysql50#_backup-nextcloud-11.05.2023 * 数据库 * 消失了,mysql_upgrade也工作了。

相关问题