在导出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_database
和localhost
(如果用户从另一台机器访问)为实际的用户名称、密码、数据库名称和用户的访问位置。用户的访问位置,指的是用户连接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