备份MySQL用户

时间:2009-02-28 08:09:08

标签: mysql database database-design migration backup

如何备份MySQL用户及其权限?

像mysqldump这样的东西?

我正在寻找类似的东西:

mysqldump -d -u root -p MyTable > Schema.sql

8 个答案:

答案 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;