如何重新获得对 myql 服务器的访问权限并转储数据库?

如何重新获得对 myql 服务器的访问权限并转储数据库?

我们重新接管了服务器的管理,现在我们需要进行一些逆向工程。我们把新网站的开发交给了一家外部公司,他们需要从旧网站转储数据库。

Web 服务器采用 Debian 操作系统,运行 Apache 和 MySQL。我找到运行在本地主机 3306 端口上的服务器。该服务器已投入生产。

尝试了“longshot”mysqldump:

web:/home/user# mysqldump -P 3306 -h localhost -u root -p db
Enter password: 
-- MySQL dump 10.11
--
-- Host: localhost    Database: db
-- ------------------------------------------------------
-- Server version       5.0.32-Debian_7etch12-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
mysqldump: Got error: 1049: Unknown database 'db' when selecting the database

我有该机器的 root 访问权限。以下是我的问题:

如何检索有关现有数据库的信息?
如何检索对它的访问权限(用户/密码)?
如何进行正确的转储?

答案1

如果您不再有权访问 mysql,则可以在 ssh 会话中(以 root 身份)重置 mysql root 密码,方法是先终止 .pid 文件以停止 mysqld 套接字进程。不要使用 kill -9。

kill `cat /mysql-data-directory/host_name.pid`

现在创建一个包含以下 Mysql 查询的文本文件。每行一个。将其保存到类似 /home/me/mysql-init 的位置

UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
FLUSH PRIVILEGES;

现在使用以下命令启动mysql:

mysqld_safe --init-file=/home/me/mysql-init &

您刚刚以 root 用户和新的 root 密码重新获得了对 mysql 的访问权限。不要忘记删除 mysql-init 文件。

使用此登录信息,您可以显示服务器上的所有数据库。首先使用新的登录信息登录 mysql:

mysql --user=root --password=your-password

现在查看所有数据库:

mysql> show databases;

现在,你可以使用以下命令将所需的任何数据库转储到文件中:

mysqldump -h localhost -u root -p databasename > dumpfile.sql

或者只是所有数据库:

mysqldump -h localhost -u root -p --all-databases > all_dbs.sql

答案2

该数据库显然没有命名db

你为什么不直接转储所有数据库?

mysqldump --all-databases ......

相关内容