mysqldump迁移方案
数据库D从A主机迁往B主机
前期准备
向研发人员收集用户名和密码,在B主机的数据库实例中,预先建立用户
1
| B: mysql> create user 'username'@'%' identified by 'password';
|
找到该用户对应的D库的权限SQL语句,保存一下,等到B主机建库后,给该用户赋予权限
1
| A: mysql> show grants for username;
|
一般情况下午特殊建库参数,注意字符集
用户体系的my.cnf中指定字符集默认为character_set_server=utf8
ocrdb的my.cnf中指定字符集默认为character_set_server=utf8mb4
1
| A: mysql> show create database dbname;
|
1
| B: mysql> 在B主机上执行第二步保存的grant语句
|
迁移前的操作
- 将A主机上D库用户的
insert
update
delete
权限撤销
1
| A: mysql> revoke INSERT, UPDATE, DELETE ON databasename.* FROM username;
|
尽可能停止连接数据库A
的所有前端应用,不能停止的,将在数据库中kill
掉ESTABLISHED
的连接,让前端应用的连接池重新连接mysql数据库
检查该用户的连接情况
1
| A: $> mysql -uroot -p -e 'show processlist;' | grep username
|
如果前端应用停止后,仍有其他服务器的连接,则kill掉这些连接,让其重连,重新获取该库权限,并记录这些服务器的IP地址,因为该库迁走并剥夺写入权限后,这些服务器可能会有问题
迁移
1
| A: $> mysqldump -uusername -p databasename | gzip > databasename.sql.gz
|
1
| A: $> scp databasename.sql.gz ps@IP:/tmp/
|
1
| B: $> gunzip < databasename.sql.gz | mysql -uroot -p databasename
|
迁移后
附
1
| revoke all on *.* from sss@localhost ;
|