python批量導(dǎo)出導(dǎo)入MySQL用戶的方法
數(shù)據(jù)庫(kù)遷移(A -> B),需要把用戶也遷移過(guò)去,而用戶表(mysql.user)有上百個(gè)用戶。有2種方法進(jìn)行快速遷移:
1,在同版本的條件下,直接備份A服務(wù)器的mysql數(shù)據(jù)庫(kù),還原到B服務(wù)器。
2,要是不同版本的數(shù)據(jù)(5.1 -> 5.5),很可能mysql數(shù)據(jù)庫(kù)下面的一些表結(jié)構(gòu),甚至表數(shù)據(jù)的默認(rèn)值都不一樣,按照1的方法進(jìn)行遷移,雖然最后也是可以正常訪問(wèn),但是還是有些不太放心,很可能會(huì)影響到了B服務(wù)器上的MySQL,這樣就需要用命令行來(lái)生成帳號(hào)了,這樣是最安全和放心的。下面用python腳本來(lái)進(jìn)行批量導(dǎo)出:
#!/bin/env python
# -*- encoding: utf-8 -*-
#-----------------------------------------
# Name: mysql_user_dump.py
# Purpose: 批量導(dǎo)出用戶
# Author: zhoujy
# Created: 2013-05-28
#-----------------------------------------
import MySQLdb
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)
運(yùn)行:python mysql_user_dump.py
GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.234.%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
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上面執(zhí)行就好了,也可以在執(zhí)行腳本的時(shí)候重定向到一個(gè)sql文件:如:user.sql,在到B服務(wù)器的數(shù)據(jù)庫(kù)里面執(zhí)行source user.sql 就完成了導(dǎo)入工作。
第2個(gè)方法最好,不需要1里面的刪表和重建表的操作,最安全。
相關(guān)文章
python獲取點(diǎn)擊的坐標(biāo)畫圖形的方法
今天小編就為大家分享一篇python獲取點(diǎn)擊的坐標(biāo)畫圖形的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07簡(jiǎn)單談?wù)刾ython中的Queue與多進(jìn)程
本文給大家簡(jiǎn)單總結(jié)了下再Python中的隊(duì)列對(duì)象(queue)以及多進(jìn)程(multiprocessing),非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下2016-08-08Python 執(zhí)行字符串表達(dá)式函數(shù)(eval exec execfile)
今天在網(wǎng)上搜尋一些應(yīng)用的例子時(shí),發(fā)現(xiàn)有人用TK僅僅幾行代碼就寫了個(gè)簡(jiǎn)易的計(jì)算器,驚為天人?;貞浧饎倢W(xué)軟件技術(shù)基礎(chǔ)時(shí)編寫簡(jiǎn)易計(jì)算器的艱辛,頓時(shí)淚流滿面2014-08-08Python實(shí)現(xiàn)GUI學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)GUI學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01Python實(shí)現(xiàn)Mysql全量數(shù)據(jù)同步的腳本分享
這篇文章主要為大家詳細(xì)介紹了基于Python如何實(shí)現(xiàn)Mysql全量數(shù)據(jù)同步的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-06-06Python爬取三國(guó)演義的實(shí)現(xiàn)方法
這篇文章通過(guò)實(shí)例給大家演示了利用python如何爬取三國(guó)演義,對(duì)于學(xué)習(xí)python的朋友們來(lái)說(shuō)是個(gè)不錯(cuò)的實(shí)例,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2016-09-09Django實(shí)現(xiàn)簡(jiǎn)單登錄的示例代碼
本文主要介紹了Django實(shí)現(xiàn)簡(jiǎn)單登錄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11