crontab-mysqldump 正在使用不同的套接字

crontab-mysqldump 正在使用不同的套接字

首先,我已经永久设置了 MySQL 的 PATH 目录,这样我就可以在终端的任何目录中使用它。为了验证这个过程,我重启了电脑,打开终端并使用命令mysql。我也可以在终端的任何目录中使用mysqldump。我正在使用 lampp,它安装在 中/opt/lampp/

在终端中使用 mysql 或 mysqldump 时我没有遇到任何问题

我不明白的是,我想修复的是当在 crontab 中使用 mysqldump 时。

所以我的桌面上有这个脚本,文件名为mysqldump.sh。里面的内容是;mysqldump -u root thedatabase > /media/sfadmin/BACKUP/db_'date +\%Y'.sql 2> /media/sfadmin/BACKUP/crontab_error.log

这里的问题是 mysqldump 不工作并抛出一个错误:mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect我不明白为什么。

我也尝试过将脚本中的代码更改为;(cd /opt/lampp/bin/ && mysqldump -u root thedatabase > /media/sfadmin/BACKUP/db_'date +\%Y'.sql 2> /media/sfadmin/BACKUP/crontab_error.log)但仍然没有成功。

出了什么问题?为什么 crontab 使用套接字/var/run/mysqld/mysqld.sock?我该如何修复?

无论如何,crontab 是*/1 * * * * /home/sfadmin/Desktop/mysqldump.sh。这应该每分钟执行一次 mysqldump。

答案1

好吧,我真的不知道发生了什么。为什么它使用/var/run/mysqld/mysqld.sock本来就不存在的套接字。我猜是我在配置中犯了一些错误,mysql-server我安装时使用的先前的套接字apt仍在使用中。我不知道在哪里可以找到配置,也不知道应该在哪里设置新的套接字,因为该文件etc/my.cnf不再存在。

所以我所做的就是创建一个链接,/opt/lampp/var/mysql/mysql.sock然后将文件命名为mysqld.sock。在我的终端中,我逐行执行以下命令;

cd /opt/lampp/var/mysql/

ln -s /opt/lampp/var/mysql/mysql.sock /opt/lampp/var/mysql/mysqld.sock

据说创建文件链接时需要使用完整路径,否则它将不起作用。

mysqld然后我在 中创建了一个新目录/var/run/。然后我简单地将mysqld.sock我创建的 移动到 中/var/run/mysqld/

就是这样。crontab 工作正常,并且 bash 脚本中的 mysqldump 命令也能正常工作。但是,我将我mysqldump.sh脚本中的命令更改为;

mysqldump --column-statistics=0 -u root thedatabase > /media/sfadmin/BACKUP/db_'date +\%Y'.sql 2> /media/sfadmin/BACKUP/crontab_error.log

现在一切都按预期进行。

更新- 事实证明上述解决方案只是暂时的。

我尝试重启电脑,结果问题又出现了。我尝试导航到,/var/run/mysqld我创建的目录已不存在。

mysqld.sock我尝试重做上述相同的方法来修复该问题,但该方法不再起作用。即使中现在存在 ,套接字也存在相同的问题/var/run/mysqld/mysqld.sock

相关内容