首先,我已经永久设置了 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
。