这几天公司新出了个组件化的项目,里面需要用到mysql数据库相关的技术,由于之前一直用的mongodb,所以mysql几乎忘光了,于是只能在linux虚拟机中重新开始学习。
基本的增删改查还好,但是在数据备份的上遇到了一些问题,好在一番尝试之后终于成功。
Mysql的api以及网上说的备份命令是:mysqldump -uroot –p 要备份的数据库名> 目标路径/目标文件名.sql,于是我就照着敲了一遍,但是结果报了一个2002的异常(补充:一开始用这个命令的时候是提示找不到mysqldump的,后来用了软连接ln把mysqldump命令实际地址连接到usr/bin):
mysqldump:Got error: 2002: Can't connect to local MySQL server through socket'/tmp/mysql.sock' (2) when trying to connect,如图1:
于是查了资料以后,我又进行了一些修改,如图2:
但是呢,这时候2002是没有了,取而代之的却是有出现了1045错误:mysqldump: Got error: 1045: Access denied for user 'root'@'localhost'(using password: YES) when trying to connect,如图3:
估摸着这意思应该是说root用户和localhost权限方面有问题,因为我记得我在设置mysql远程访问的时候把host都设置成了%,如图4:
于是又在网上搜索了一下之后,又找到了另一个备份方面的命令,尝试之后发现可行,如图5:
至此,已经在linux虚拟机中成功备份mysql数据库,但是这个命令未免就太长了,再想到mysql的api说的应该总不会错吧,于是便想着优化一下。
那么,既然1045出现的错误我已经大概能猜到是用户权限的问题,于是便从这里下手,没有root的localhost,那就加上吧。进入数据库,使用mysql,如图4,然后添加用户,如图6:
再次查看user表,可以发现成功添加,如图7:
那么备份的命令便可以变成优化之后的了,如图8:
显而易见,命令变短了,只是依旧还不够短,于是再次查找资料后找到了一个解决办法,需要把mysql.sock的实际指向地址给链接到2002错误中的地址,我的修改如图9:
那么最后,大概就是见证奇迹的时刻了吧,该验证api上的说法了:输命令,回车,再次成功备份,至此算是大功告成了,如图10:
总结一下,备份的话这里可以细分为三种命令方式,只是勉强弄懂了的话就知道其实还是一种而已。