如何恢复/重新创建mysql的默认'mysql'数据库

时间:2012-01-18 13:43:07

标签: mysql

当我安装mysql时,它附带了两个数据库,mysql和信息架构。我不小心删除了mysql数据库。有什么方法可以重新创建吗?

此外,由于它包含一个包含用户信息的表格,有没有办法可以在没有它的情况下查看用户的信息?

6 个答案:

答案 0 :(得分:33)

如果您仍然可以登录(我假设您不是因为没有用户表)并且要保存数据库,请使用

转储它们
mysqldump --routines databasename > outfile.sql

可以使用命令

重新创建MySQL数据库
# Most MySQL versions
mysql_install_db

# MySQL 5.7 and later
mysqld --initialize

MySQL Documentation here

答案 1 :(得分:4)

请参阅:http://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html

在Windows上,使用以下命令之一:

C:\> bin\mysqld --initialize
C:\> bin\mysqld --initialize-insecure

答案 2 :(得分:3)

我最近安装了mysql 8,似乎mysql默认数据库出现了问题。 无论如何,这对我有用:

mysql_upgrade -u root -p

答案 3 :(得分:1)

我遇到了类似的问题:在备份和恢复操作期间,我们删除了mysql和information_schema数据库。在恢复我们自己的数据库之后,我们无法创建用户(或者真的做任何事情),因为这些系统表没有被恢复。 (当然,我们绝不会在公司的生产环境中这样做)。

如果您仍然拥有旧mysql_install_db的副本(正如我们所做的那样),请不要使用它。由于MySQL 5.6.8它是一个perl脚本。采用与mysqld_safe类似的选项。我们运行良好 - 在我们恢复的数据库上运行InnoDB恢复,安装了系统数据库,让我们的从服务器恢复运行。

答案 4 :(得分:1)

我意外删除了数据库mysql,而 mysqld --initialize 并没有帮助我。 没有错误显示,甚至mysql服务启动正常,但文件夹mysql没有创建,mysql不可用 - 我甚至无法创建新的数据库。

在花了很多时间尝试不同的选项之后我注意到,我已经弃用了选项innodb_additional_mem_pool_size = 20M,它崩溃了mysqld --initialize

修复mysql配置后 - 效果很好。

答案 5 :(得分:1)

我遇到了这个错误:

root@ubuntu-2gb-nbg1-1 ~ # mysqld --initialize
2019-01-23T15:11:22.428139Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-01-23T15:11:22.435428Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2019-01-23T15:11:22.435653Z 0 [ERROR] Aborting

解决方案(这将删除您的所有数据库和表,进行备份!):

/etc/init.d/mysql stop
rm /var/lib/mysql -rf
mkdir /var/lib/mysql
chown mysql:mysql /var/lib/mysql
mysqld --initialize

现在,在您的skip-grant-tables中添加/etc/mysql/mysql.conf.d/mysqld.cnf,因为root密码无效,因此我们需要以某种方式登录并设置一个新密码。

/etc/init.d/mysql start
mysql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> use mysql;

Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
31 rows in set (0.00 sec)

因此,现在您有了一个带有用户表的新mysql数据库,但是密码为“ messed up”。因此,您需要设置一个有效的密码:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somepass');
FLUSH PRIVILEGES;
ctrl+d

现在从配置中删除skip-grant-tables,否则设置不安全。

现在您可以“正常”登录:mysql -u root -p(输入somepass