數據庫遷移(A -> B),需要把用戶也遷移過去,而用戶表(mysql.user)有上百個用戶。有2種方法進行快速遷移:
1,在同版本的條件下,直接備份A服務器的mysql數據庫,還原到B服務器。
2,要是不同版本的數據(5.1 -> 5.5),很可能mysql數據庫下面的一些表結構,甚至表數據的默認值都不一樣,按照1的方法進行遷移,雖然最后也是可以正常訪問,但是還是有些不太放心,很可能會影響到了B服務器上的MySQL,這樣就需要用命令行來生成帳號了,這樣是最安全和放心的。下面用python腳本來進行批量導出:
def get_data(conn):
query = 'select user,host from mysql.user order by user'
cursor = conn.cursor()
cursor.execute(query)
lines = cursor.fetchall()
return lines
def output_data(conn,rows):
for user,host in rows:
query = "show grants for '%s'@'%s'" %(user,host)
cursor = conn.cursor()
cursor.execute(query)
show_pri = cursor.fetchall()
for grants_command in show_pri:
print ''.join(grants_command)+';'
print ''
if __name__ =='__main__':
conn = MySQLdb.connect(host='localhost',user='root',passwd='123456',db='mysql',port=3306,charset='utf8')
rows = get_data(conn)
output_data(conn,rows)
運行:python mysql_user_dump.py
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.234.%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
GRANT USAGE ON *.* TO 'test'@'192.168.234.%' IDENTIFIED BY PASSWORD '*2A032F7C5BA932872F0F045E0CF6B53CF702F2C5';
GRANT SELECT, INSERT, UPDATE, DELETE ON `test`.* TO 'test'@'192.168.234.%';
GRANT USAGE ON *.* TO 'zzz_test'@'192.168.234.%' IDENTIFIED BY PASSWORD '*2A032F7C5BA932872F0F045E0CF6B53CF702F2C5';
GRANT SELECT, INSERT, UPDATE, DELETE ON `zzz%`.* TO 'zzz_test'@'192.168.234.%';
最后把這些命令在B上面執行就好了,也可以在執行腳本的時候重定向到一個sql文件:如:user.sql,在到B服務器的數據庫里面執行source user.sql 就完成了導入工作。
第2個方法最好,不需要1里面的刪表和重建表的操作,最安全。
新聞熱點
疑難解答
圖片精選