python指令碼完成資料庫的一個表一個表的遷移到另一臺伺服器
安裝MySQL-python
要想使python可以操作mysql 就需要MySQL-python驅動,它是python 操作mysql必不可少的模組。
下載MySQL-python-1.2.5.zip 檔案之後直接解壓。進入MySQL-python-1.2.5目錄:
>>python setup.py install
報錯:
[root@S220 MySQL-python-1.2.5]# python setup.py install
sh: mysql_config: command not found
Traceback (most recent call last):
File "setup.py", line 17, in
metadata, options = get_config()
File "/MySQL-python-1.2.5/setup_posix.py", line 43, in get_config
libs = mysql_config("libs_r")
File "/MySQL-python-1.2.5/setup_posix.py", line 25, in mysql_config
raise EnvironmentError("%s not found" % (mysql_config.path,))
EnvironmentError: mysql_config not found
解決辦法:手工安裝mysql_python
在setup_posix.py內找到mysql_config.path=/xxx/xxx(mysql安裝路徑/bin/mysql_config)
如下:
[root@S220 MySQL-python-1.2.5]# vi setup_posix.py
import os, sys
from ConfigParser import SafeConfigParser
# This dequote() business is required for some older versions
# of mysql_config
def dequote(s):
if s[0] in "\"'" and s[0] == s[-1]:
s = s[1:-1]
return s
def compiler_flag(f):
return "-%s" % f
def mysql_config(what):
from os import popen
f = popen("%s --%s" % (mysql_config.path, what))
data = f.read().strip().split()
ret = f.close()
if ret:
if ret/256:
data = []
if ret/256 > 1:
raise EnvironmentError("%s not found" % (mysql_config.path,))
return data
mysql_config.path ='/home/mysql/bin/mysql_config'
def get_config():
from setup_common import get_metadata_and_options, enabled, create_release_file
之後:
[root@S220 MySQL-python-1.2.5]# python setup.py install
running install
。
。
。
。
。
在包含自 _mysql.c:44 的檔案中:
/home/mysql/include/my_config.h:442:1: 警告:“HAVE_WCSCOLL”重定義
在包含自 /usr/local/include/python2.7/Python.h:8 的檔案中,
從 _mysql.c:29:
/usr/local/include/python2.7/pyconfig.h:902:1: 警告:這是先前定義的位置
copying build/lib.linux-x86_64-2.7/MySQLdb/constants/__init__.py -> build/bdist.linux-x86_64/egg/MySQLdb/constants
Processing dependencies for MySQL-python==1.2.5
Finished processing dependencies for MySQL-python==1.2.5
至此MySQL-python驅動安裝成功。。。。。。
把mysql查出的內容放到一個列表中:
[root@S220 ~]# cat mysqldump.py
#!/usr/bin/python
#-*_ coding:UTF-8 _*_
import MySQLdb
conn= MySQLdb.connect(
host='192.168.0.144',
port = 3306,
user='root',
passwd='admin',
db ='jf',
)
cur = conn.cursor()
dbs=cur.execute('show databases')
mail_list=[]
#獲取所有結果
databases = cur.fetchall()
result=list(databases)
for r in result:
mail_list.append(r)
print mail_list
[root@S220 ~]# python mysqldump.py
[('ad',), ('agency',), ('beifen',), ('chinabidding',), ('crm',), ('crm2',), ('data',), ('dingyue',), ('experience',), ('fxb2016',), ('hdzq',), ('history',), ('info',), ('info_addition',), ('info_back',), ('information_schema',), ('infoservice',), ('jf',), ('jf2016',), ('liuwenhe',), ('log',), ('mailer',), ('mysql',), ('performance_schema',), ('resin_session',), ('sbiao',), ('sbw2',), ('stat',), ('test',), ('web',), ('weblog',), ('winfo',)]
上面的結果中是一個列表中又有一個元祖,這不是我們想要的結果,所以先迴圈列表再迴圈元祖,這樣可以真正做到把資料庫查出的內容存到一個列表中。如下紅色部分。
[root@S220 ~]# cat mysqldump.py
#!/usr/bin/python
#-*_ coding:UTF-8 _*_
import MySQLdb
conn= MySQLdb.connect(
host='192.168.0.144',
port = 3306,
user='root',
passwd='admin',
db ='jf',
)
cur = conn.cursor()
dbs=cur.execute('show databases')
mail_list=[]
#獲取所有結果
databases = cur.fetchall()
result=list(databases)
for r in result:
mail_list.append(r)
dbs_list=[]
for db in mail_list:
for db1 in db:
dbs_list.append(db1)
print(dbs_list)
下面是寫的一個python指令碼,用來完成從一臺mysql伺服器遷移到另一臺mysql伺服器,一個表一個表的遷移,這試用於搭建主從,或者搭建測試環境的場景。我這個未來便於理解,寫的有點多餘,其實不需要把取出來的庫和下面的表名字,放到一個列表中這2步驟。
[root@S220 ~]# cat mysqldump.py
#!/usr/bin/python
#-*_ coding:UTF-8 _*_
import MySQLdb
import os
conn= MySQLdb.connect(
host='192.168.0.144',
port = 3306,
user='root',
passwd='***',
db ='jf',
)
cur = conn.cursor()
dbs=cur.execute('show databases')
mail_list=[]
#獲取所有結果
databases = cur.fetchall()
result=list(databases)
for r in result:
mail_list.append(r)
dbs_list=[]
for db in mail_list:
for db1 in db:
dbs_list.append(db1)
conn.close()
cur.close()
tables_list=[]
for db2 in dbs_list:
if db2=='liuwenhe':
conn_name={"host":"192.168.0.**","user":"root","passwd":"ad****min","db":db2}
conn1= MySQLdb.connect(**conn_name)
cur_new = conn1.cursor()
tbs=cur_new.execute('show tables')
tbs_list=[]
tables = cur_new.fetchall()
result=list(tables)
for t in result:
tbs_list.append(t)
for tb1 in tbs_list:
for tb2 in tb1:
tables_list.append(tb2)
conn1.close()
cur_new.close()
for table in tables_list:
dumpcmd = "/home/mysql/bin/mysqldump -uroot " + " --opt " " -padmin " +" -h192.168.0.** " +"-d " +db2 +" "+table +" > " + "/backup/" + db2 +"_"+table+ ".sql"
os.system(dumpcmd)
sql1="/home/mysql/bin/mysql "+"-uroot "+"-pg****in@123 "+"-h192.168.0.220 "+db2 +"
os.system(sql1)
print "data translate completed"
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2146753/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- github倉庫遷移到gitlab以及gitlab倉庫遷移到另一個gitlab伺服器GithubGitlab伺服器
- Oracle如何把一個表匯出匯入到另一個伺服器上的另一個表裡Oracle伺服器
- 伺服器內的資料如何遷移到另一臺不同型號的伺服器上伺服器
- 七牛資料從一個桶轉移到另一個桶
- EAS附件表由資料庫遷移到FTP資料庫FTP
- mysql 從一個表中查詢,插入到另一個表中MySql
- MySQL 更新一個表裡的欄位等於另一個表某欄位的值MySql
- Sql查詢 一個表中某欄位的資料在另一個表中某欄位中不存在的SQL
- 匯豐銀行從65個關聯式資料庫遷移到一個全球MongoDB資料庫 - diginomica資料庫MongoDB
- SSIS 開發篇-做一個簡單的SqlServer資料表資料遷移SQLServer
- python指令碼批次建立資料表Python指令碼
- efcore 跨表查詢,實現一個介面內查詢兩個不同資料庫裡各自的表資料資料庫
- MySQL 拷貝一個InnoDB分割槽表到另一個例項MySql
- SQL Server資料庫檢視一個資料表各列的註釋SQLServer資料庫
- mysql從一張表中取出資料插入到另一張表MySql
- mysql怎麼複製一張表的資料到另一張表MySql
- 使用SQL語句將資料庫中的兩個表合併成一張表SQL資料庫
- 我想做一個指令碼更新一些excel表/細胞。指令碼Excel
- oracle 觸發器,當一個表更新或插入時將資料同步至另個庫中的某個表中Oracle觸發器
- Oracle同一臺伺服器建立多個資料庫Oracle伺服器資料庫
- SQL Server資料庫怎麼找出一個表包含的頁資訊(Page)SQLServer資料庫
- 將一個Python指令碼做成一個Windows服務Python指令碼Windows
- 將一個Activity中的資料傳到另一個Activity的Fragment中的方法Fragment
- MySQL資料庫之mysql5.7基礎 檢視一個資料庫中的所有表MySql資料庫
- MySQL資料庫遷移到PostgresMySql資料庫
- VMware ESXI磁碟下載虛擬機器遷移到另一臺VMware ESXI虛擬機
- 如何完整遷移git倉庫到另一個遠端地址Git
- 分享一個提高運維效率的 Python 指令碼運維Python指令碼
- rsync 從一臺伺服器遠端拉取另一臺伺服器資料的實踐伺服器
- 在ABAP裡取得一個資料庫表記錄數的兩種方法資料庫
- SQL Server 批量生成資料庫內多個表的表結構SQLServer資料庫
- MongoDB 複製一個collection裡的資料到另一個collectionMongoDB
- 寫一個Python指令碼刪除一個.py檔案的所有註釋Python指令碼
- 你的資料庫真的需要遷移到雲嗎?資料庫
- 資料庫表的唯一索引問題資料庫索引
- mssql sqlserver 使用sql指令碼 清空所有資料庫表資料的方法分享SQLServer指令碼資料庫
- 在Django中,多資料操作,你可以編寫測試來查詢另一個資料庫伺服器中的資料,並將結果匯入當前Django專案的資料庫表中Django資料庫伺服器
- DB2資料提取轉化的一個指令碼KCDB2指令碼
- 分享一個MySQL資料庫表結構匯出word文件最方便的方法MySql資料庫