mysql備份數據庫以及拷貝數據庫到另一台服務器上


在使用中的環境如何在盡量少影響的情況下做數據庫轉移,這個有很多問題需要注意的,需要考慮周全。
這次要轉移的數據庫是MyISAM,轉移起來比較簡單,但目標數據庫是Master-Slave方式的,所以轉移起來需要注意:

1 轉移到Master時,Master-Slave的數據應該是一樣的,否則會導致同步出問題
2 轉移到Master時,切換時間盡可能短

轉移過程大概有以下階段:

1 導出當前數據庫的數據
2 導入到新的數據庫
3 更改連接數據庫的方式

第一階段有好多方式:

1 導出sql文件mysqldump
   適合數據不多而且有InnoDB的數據表的情況。

mysqldump -S /Data/mysqldb/3306/mysql.sock -uusername -ppassword aslibra>backup.sql
-S 是sock文件的位置


2 復制數據庫mysqlhotcopy
   適合MyISAM數據表

mysqlhotcopy -S /Data/mysqldb/3306/mysql.sock -u username -p password --addtodest aslibra /backup/mysql/
-S 是sock文件的位置
--addtodest 是覆蓋現有數據庫文件
會復制一份在/backup/mysql/aslibra/XXX


3 停止數據庫,直接復制文件
   適合懶人不怕停止服務的情況

第二階段主要看你選擇的第一階段了:

1 導入sql文件

mysql -S /Data/mysqldb/3306/mysql.sock -uusername -ppassword aslibra<backup.sql


如果沒有相應的數據庫,需要創建
可以遠程導入的,導入到Master數據庫就可以了,slave會自動傳輸的
2 復制數據庫文件
這里就簡單的復制了,打包傳輸然后到目標數據庫解壓也就ok了
或者scp傳輸文件,NFS共享文件
Master和Slave都傳輸一樣的文件,記得文件在目標服務器需要是mysql可讀寫的

第三階段是在第二階段完成后立刻做的,這里有一個快捷的方式來應對有很多PHP文件需要修改的情況:

假設原先的數據庫的連接是 127.0.0.1 ,先修改為 mysqldb,然后在 /etc/hosts文件里面加一行指定

127.0.0.1 mysqldb


這樣的好處是,轉移數據庫連接方式只是需要修改hosts文件即可一下子把所有數據庫連接都修改了,無痛轉移。。
但以上方法要求mysql端口要一致。
另外,如果沒法修改為名稱做連接,那可以啟用mysql-proxy,做一下設置就可以了,詳細可以查詢相關資料
也可以使用rinted做端口代理應付轉移的過渡期,參考rinetd

以上三種過渡方式設定后,再修改每個連接為新的服務器連接即可。

 

 

 

(轉載)將MySQL數據庫拷貝到另一台機器

你可以在支持相同浮點格式的不同架構之間為MyISAM表復制.frm、.MYI和.MYD文件。(MySQL關注所有字節交換問題)。請參見15.1節,“MyISAM存儲引擎”

如果你需要在不同的架構之間轉移數據庫,可以使用mysqldump創建含有SQL語句的文件。然后你可以將文件轉移到其它機器上,並將它輸入到MySQL客戶端。

使用mysqldump --help來看有哪些選項可用。如果你正將數據移動到更新版本的MySQL,你應當使用mysqldump –opt來利用各種優化性能來產生更小、可以更快處理的轉儲文件。

在兩台機器之間移動數據庫的最簡單(盡管不是最快)的方法是在數據庫所在的機器上運行下面的命令:

shell> mysqladmin -h 'other_hostname' create db_name
shell> mysqldump --opt db_name | mysql -h 'other_hostname' db_name

如果你想要從遠程機器通過慢速網絡復制數據庫,可以使用:

shell> mysqladmin create db_name
shell> mysqldump -h 'other_hostname' --opt --compress db_name | mysql db_name

還可以將結果保存到文件中,然后將文件轉移到目標機器上並將文件裝載到數據庫中。例如,可以在源機器上使用下面的命令將數據庫備份到文件中:

shell> mysqldump --quick db_name | gzip > db_name.contents.gz

(該例子中創建的文件是壓縮格式)。將含有數據庫內容的文件到目標機上並運行命令:

shell> mysqladmin create db_name
shell> gunzip < db_name.contents.gz | mysql db_name

還可以使用mysqldumpmysqlimport來轉移數據庫。對於大的表,比只是使用mysqldump要快得多。在下面的命令中,DUMPDIR代表用來保存mysqldump輸出的目錄全路徑名。

首先,創建保存輸出文件的目錄並備份數據庫:

shell> mkdir DUMPDIR
shell>mysqldump --tab=DUMPDIR db_name

然后將DUMPDIR目錄中的文件轉移到目標機上相應的目錄中並將文件裝載到MySQL:

shell> mysqladmin create db_name            # create database
shell> cat DUMPDIR/*.sql | mysql db_name    # create tables in database
shell> mysqlimport db_name DUMPDIR/*.txt    # load data into tables

不要忘記復制MySQL數據庫,因為授權表保存在該數據庫中。你可能需要在新機器上用MySQL root用戶運行命令,直到產生MySQL數據庫。

將mysql數據庫導入目標機器后,執行mysqladmin flush-privileges,以便服務器重載授權表信息。

----------------------------------------------------------------------------------------------------------------------------------

按照上面的方法試了個多小時成功了,主要是上面的命令說的不是很完整:

shell> mysqladmin -h 'other_hostname' create db_name
(mysqladmin -h other_hostname -u username -p create db_name)
shell> mysqldump --opt db_name | mysql -h 'other_hostname' db_name
(mysqldump -h local_host -u username -p local_db_name | mysql -h other_hostname -u username -p db_name)

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/qq546937127/archive/2009/11/24/4863824.aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM