在导出mysql数据库(.sql格式)时遇到的问题及解决方法

将mysql数据库导出为.sql格式,连接上vps后直接在root命令行界面输入

mysqldump -u [username] -p[password] [database_name] > database_backup.sql

会显示-bash: mysqldump: command not found

输入sudo apt-get install default-mysql-client 后再输入备份指令

会报错mysqldump: Got error: 2002: "Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)" when trying to connect

说明表示MySQL服务没有运行,或者客户端尝试以错误的方式或路径连接到MySQL服务器。

解决方法:

(纯小白通过gpt及朋友的帮助下找到的解决方法,大佬勿喷)

一般mysql是安装在docker中,我们可以通过进入到一个与mysql交互式的bash shell页面来运行备份命令。(Docker 是管理和部署应用的工具,而容器则是被Docker管理的运行环境实体。)

步骤:

1、查找MySQL容器的名称或ID
首先,你需要知道MySQL容器的名称或ID。在命令行中输入以下命令来列出所有运行的容器:
docker ps

这会显示所有运行中的容器及其信息。从列表中找到你的MySQL容器,并记下它的名称或ID。

2、使用Docker exec命令进入容器
当你知道了容器的名称或ID后,就可以使用docker exec命令来启动一个交互式的bash shell在该容器内。如果容器内部有bash shell,可以使用以下命令:
docker exec -it 容器名称或ID bash
docker exec -it mysql bash

docker exec -it mysql sh 命令会在名为 "mysql" 的Docker容器内启动一个交互式的shell会话。这允许你直接在该容器的命令行环境中运行命令,就像你在容器的操作系统内部一样。这对于调试、管理容器内的服务或查看容器内部的状态非常有用。)

(如果容器内部没有bash shell,需要使用sh,命令如下:docker exec -it 容器名称或ID sh

因为直接使用普通用户可能会因为权限不够导致无法备份,这里以wordpress为例:网站根目录下config.php文件中显示的数据库用户名,一般为普通用户,而非root用户。博主使用kejilion的脚本安装docker及mysql,root用户的密码是保存在/home/web/docker- compose.yml文件中,这个因人而异。当然你也可以选择给普通用户增加权限,命令如下:

首先登录到MySQL服务器 (即进入MySQL的命令行界面,看到 mysql> 提示符)

mysql -u root -p

然后输入GRANT命令

GRANT SELECT, LOCK TABLES, SHOW VIEW ON your_database.* TO 'username'@'localhost' IDENTIFIED BY 'password';

替换username, password, your_databaselocalhost(如果用户从另一台机器访问)为实际的用户名称、密码、数据库名称和用户的访问位置。用户的访问位置,指的是用户连接MySQL服务器的来源地址。在MySQL权限设置中,这个地址用于指定哪些主机上的用户被允许连接到MySQL服务器。这可以是一个具体的IP地址、一个域名、或者使用通配符的形式。

举例来说:

  • 'username'@'localhost' 表示只有在MySQL服务器所在的机器上的用户可以连接。
  • 'username'@'192.168.1.5' 表示只有从IP地址为192.168.1.5的机器上的用户可以连接。
  • 'username'@'%' 表示从任何机器的用户都可以连接。

这个设置是为了安全考虑,通过限制哪些机器上的用户可以访问数据库,可以降低未授权访问的风险。在实际应用中,你应该根据用户连接数据库的位置来设置这个参数。

刷新权限:在执行完GRANT命令后,输入以下命令来刷新权限,确保更改立即生效:

FLUSH PRIVILEGES;

3、在Docker容器中使用mysqldump:在Docker的mysql容器的命令行界面上,使用mysqldump来备份数据库。基本命令格式如下:
mysqldump -u 用户名 -p 数据库名 > 备份文件名.sql

用户名 替换为你的MySQL用户名(例如root),数据库名 替换为你想要备份的数据库名称,备份文件名.sql 替换为你想要的备份文件名。

例如,如果你想以root用户备份名为mydatabase的数据库,并输出为mydatabase_backup.sql文件你可以这样做:
mysqldump -u root -p mydatabase > mydatabase_backup.sql

在输入命令后,系统会提示你输入密码。输入你的MySQL用户密码,然后命令将开始执行。

4、此时输入exit返回到服务器的命令行界面

sudo find / -name "mydatabase_backup.sql" 即可返回具体路径

便可以到通过SFTP定位到对应位置导出文件了

Tips:

更简便的方法便是指定完整路径来保存备份文件

例如:

mysqldump -u root -p mydatabase > /var/lib/mysql/mydatabase_backup.sql

最后修改:2024 年 08 月 20 日
如果觉得我的文章对你有用,请随意赞赏