如何备份MySQL用户及其权限?
像mysqldump这样的工具有吗?
我正在寻找类似于:
mysqldump -d -u root -p MyTable > Schema.sql
如何备份MySQL用户及其权限?
像mysqldump这样的工具有吗?
我正在寻找类似于:
mysqldump -d -u root -p MyTable > Schema.sql
mysql -BNe "select concat('\'',user,'\'@\'',host,'\'') from mysql.user where user != 'root'" | \
while read uh; do mysql -BNe "show grants for $uh" | sed 's/$/;/; s/\\\\/\\/g'; done > grants.sql
你可以使用以下命令备份MySQL数据库:
mysqldump -u root -p mysql > mysql.sql
通过执行以下命令来恢复MySQL数据库:
mysql -uroot -p mysql < mysql.sql
在恢复转储后不要忘记执行
FLUSH PRIVILEGES
的操作。
希望能够帮到你...
在我使用MySQL的经验中,我没有看到可以通过命令行备份用户及其权限信息的功能。
但是,我可以通过备份MySQL来备份这些关键数据。
mysqldump -u root -p mysql > mysql.sql
Percona有一个非常好的工具。 pt-show-grants
会导出用户及其权限,以便您可以轻松地重新加载它们。
https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html
用户和权限存储在名为“mysql”的数据库中。您可以使用mysqldump备份名为“mysql”的数据库中的表格。
好的实践是使用脚本每天备份MySQL用户及其权限。看一个例子:
#!/bin/sh
HOSTNAME="localhost"
mysql -h $HOSTNAME -B -N -e "SELECT CONCAT('\'', user,'\'@\'', host, '\'') FROM user WHERE user != 'debian-sys-maint' AND user != 'root' AND user != ''" mysql > mysql_all_users_$HOSTNAME.txt
while read line; do mysql -h $HOSTNAME -B -N -e "SHOW GRANTS FOR $line"; done < mysql_all_users_$HOSTNAME.txt > mysql_all_users_$HOSTNAME.sql
sed -i.bak 's/$/;/' mysql_all_users_$HOSTNAME.sql
rm mysql_all_users_$HOSTNAME.txt
rm mysql_all_users_$HOSTNAME.sql.bak
mysql -h $HOSTNAME
后面的两个位置添加-p
或-u username -p
。对于 MySQL 命令行用户来说,这可能非常明显,但是对于 @spirit 上面的答案,需要在两个 mysql 命令后添加 -u root -ppassword。
mysql -u root -ppassword -BNe "select concat(''',user,''@'',host,''') from mysql.user where user != 'root'" | while read uh; do mysql -u root -ppassword -BNe "show grants for $uh" | sed 's/$/;/; s/\\/\/g'; done > grants.sql;
mysql ${logininfo} -B -N -e "SELECT CONCAT('\'',user,'\'@\'',host,'\'') from user where user != 'root'" mysql | \
while read uh
do
echo "SHOW GRANTS FOR ${uh};"
done | mysql ${logininfo} -B -N | sed -e 's/$/;/' > ${outfile}
FLUSH PRIVILEGES
命令之后,一切都开始正常工作了。 - Dzamir