当我安装mysql时,它附带了两个数据库,mysql和信息架构。我不小心删除了mysql数据库。有什么方法可以重新创建吗?
此外,由于它包含一个包含用户信息的表格,有没有办法可以在没有它的情况下查看用户的信息?
答案 0 :(得分:33)
如果您仍然可以登录(我假设您不是因为没有用户表)并且要保存数据库,请使用
转储它们mysqldump --routines databasename > outfile.sql
可以使用命令
重新创建MySQL数据库# Most MySQL versions
mysql_install_db
# MySQL 5.7 and later
mysqld --initialize
答案 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
)