在对 TiDB 数据库进行迁移的时候,有时候也需要迁移源数据库内的用户与权限。对于这个迁移我们可以从 mysql.user 表来获取用户的相关权限来生成相应的SQL语句,然后在目标服务器上来执行生成的SQL语句即可。
TiDB 支持 show grants 查看用户权限
1、生成用户权限的脚本
# more exp_grant.sh
#!/bin/bash
ip="192.168.10.11"
port=4000
user="root"
pwd="cecf159"
# Function export user privileges
expgrants()
{
mysql -B -h${ip} -P${port} -u${user} -p${pwd} -N $@ -e "SELECT CONCAT(
'SHOW GRANTS FOR ''', user, '''@''', host, ''';'
) AS query FROM mysql.user where user<>'root'" | /
mysql -h${ip} -P${port} -u${user} -p${pwd} $@ | /
sed 's//(GRANT .*/)//1;/;s/^/(Grants for .*/)/-- /1 /;/--/{x;p;x;}'
}
# Function export user password
setpassword()
{
echo ""
echo "-- USER PASSWORD SET"
mysql -u${user} -h${ip} -P${port} -p${pwd} -N $@ -e "SELECT CONCAT('UPDATE mysql.user set password = ''', password, ''' where host = ''', host , ''' and user = ''', user ,''';') AS query FROM mysql.user where user<>'root'"
echo "flush privileges;"
}
expusers()
{
expgrants
setpassword
}
expusers > ./grants.sql
2、生成权限SQL脚本
# ./exp_grant.sh
3、在目标服务器上执行脚本 将生成的脚本在目标服务器上执行即可。
mysql -uname -ppwd <grants.sql
需要注意: a、目标服务上为非空服务器,已经存在一些账户及权限应考虑会覆盖的问题。 b、如果仅仅需要迁移非root用户,可以在原脚本中添加过滤条件,即 where user<>’root’
版权声明:本文为博主原创文章,未经博主允许不得转载。



