我们经常用mysqldump来做数据库备份的工作,终端中手工执行,或是写到sh脚本中由系统定时执行。
一般命令格式如下:
mysqldump -u [user name] -p[password] [database name] > [dump file]
一般来说在终端中执行该命令时,-p参数后留空,系统会在执行时提示你要输入对应的密码。
如果把这个命令放到脚本里去,-p参数后就要填写真实的密码,这样脚本才能正确执行,否则系统会等待用户输入密码直到超时退出。
这里要讲的是,mysqldump命令按上面的方法在脚本中使用时,如果有其它用户登录了系统,然后他又用ps命令来查询系统进程,他会发现你的mysql用户名和密码全显示了出来。相当的不安全。
如何解决?
在my.cnf配置文件中,添加如下内容:
[mysqldump]
user=mysqluser
password=secret
然后,在脚本中就不需要再写-u -p参数了。同样,终端中执行mysqldump也不需要带-u -p参数。
是不是安全了一点。
可能还不够安全,my.cnf是全局的配置文件,可能为了执行某项任务,这里填的用户的权限比较大,还是有点危险的。
那么,mysqldump有个参数叫--defaults-file,可以指定配置文件的位置,这样,你就可以在指定的.cnf文件中填上有适当权限的用户信息,比如只有只读权限的。
比如这样:
mysqldump --defaults-file=/path-to-file/my.cnf –u my_username my_db > my_db.sql
这样mysqldump执行时会去读指定的配置文件,使用其中的信息来连接数据库。
上面的命令可以看到使用了-u参数来指定了用户名,但是没有-p参数,所以,在配置文件中,可以只保留password=secret的设置。这样,一部分信息通过命令参数传递,一部分信息通过配置文件传递,隐藏了不必要暴露的信息,是不是相对安全了些。
以上仅供参考,请以官方文档为准。
-完-