如何备份MySQL用户及其权限?
像mysqldump这样的东西?
我正在寻找类似的东西:
mysqldump -d -u root -p MyTable > Schema.sql
答案 0 :(得分:38)
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
答案 1 :(得分:23)
您可以使用
备份mysql数据库mysqldump -u root -p mysql > mysql.sql
并通过执行
恢复mysql数据库 mysql -uroot -p mysql < mysql.sql
别忘了
FLUSH PRIVILEGES
恢复转储后。
希望它有所帮助...
答案 2 :(得分:13)
到目前为止,我使用MySQL的经验并没有看到通过命令行备份用户及其权限的任何内容。
但我可以通过备份mysql来备份这些关键数据
mysqldump -u root -p mysql > mysql.sql
答案 3 :(得分:5)
用户和权限存储在名为“mysql”的数据库中。您可以使用mysqldump备份名为“mysql”的数据库中的表。
答案 4 :(得分:1)
Percona为此提供了一个很好的工具。 Uncaught TypeError: Failed to set the 'files' property on 'HTMLInputElement': The provided value is not of type 'FileList'.
将转储用户及其权限,因此您可以轻松地重新加载它们。
https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html
答案 5 :(得分:0)
优良作法是为每日备份MySQL用户及其特权使用脚本。 看看一个:
private void Button1_Click(object sender, EventArgs e)
{
Advise1 form = new Advise1();
form.Show();
this.Close();
}
此脚本的结果将是具有用户和特权的mysqldump文件。
P.S。如果您的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
后面的-p
或-u username -p
放在两个位置。
答案 6 :(得分:0)
上面给出的脚本给出了总体思路,但是效率低下。他们分叉/执行mysql n + 1次。只需两次调用mysql即可完成
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}
如果除了root用户之外,您不想备份使用其他用户,或者在第一个mysql调用的where子句中指定用户!='whatever'。
答案 7 :(得分:-1)
对于mysql命令行可能非常明显,但对于上面的精神答案,必须在两个mysql命令之后添加-u root -ppassword
mysql -u root -ppassword -BNe“从mysql.user中选择concat('\'',user,'\'@ \'',host,'\''),其中user!='root'”|读到呃;做mysql -u root -ppassword -BNe“show give for $ uh”| sed's / $ /; /; S / \\ / \ / G';完成&gt; grants.sql;