A. mysql數據同步問題
查找MYSQL主從同步方案,
已經很成熟的方案了,一主,多從,主伺服器負責寫入,從伺服器只讀。
mysql主從方案主要作用:
讀寫分離,使資料庫能支撐更大的並發。在報表中尤其重要。由於部分報表sql語句非常的慢,導致鎖表,影響前台服務。如果前台使用master,報表使用slave,那麼報表sql將不會造成前台鎖,保證了前台速度。
發揚不同表引擎的優點。目前Myisam表的查詢速度比innodb略快,而寫入並發innodb比myIsam要好。那麼,我們可以使用innodb作為master,處理高並發寫入,使用master作為slave,接受查詢。或在myisam slave中建立全文索引,解決innodb無全文索引的弱點。
熱備,slave和master的數據「准實時」同步。
准備工作。先分別安裝兩台MYSQL(主伺服器:192.168.84.137,從伺服器:192.168.84.130)
配置MASTER。找到my.cnf文件,修改:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = study #要備份的資料庫
#binlog_do_db = backup #要備份的資料庫
#binlog_ignore_db = test #不需要備份的資料庫
其中,雖然作為主機,但server-id不是必須為1.但一般都填1
binlog_do_db為需要復制的db。 binlog_ignore_db為忽略復制的db。需要增加DB的話,就增加相應的一行。(最好寫在從庫配置)
重啟master資料庫,運行檢查:
mysql> show master status; #檢查是否以master形式啟動了。
+------------------+----------+----------------------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+----------------------------------+------------------+
| mysql-bin.000001 | 1087 | study,backup | test
+------------------+----------+----------------------------------+------------------+
1 row in set (0.00 sec)
mysql> show variables like "%log%";
#需要看到這樣的一行,說明binlog已經開啟了: log_bin | ON
在master上為slave建立用戶
mysql> grant replication slave on *.* to 'replication'@'192.168.84.130' identified by '123456';
這樣,主機配置完畢。
配置slave
server-id = 2 #隨便什麼數字,多台slave注意不能為重復就可以了。
#log_bin = /var/log/mysql/mysql-bin.log #slave的binlog就沒有必要再開啟了。注釋掉。
master-host = 192.168.84.137 #master的IP
master-user = replication #上面操作中,建立的用戶名
master-password = 123456 #上面操作中,建立的密碼
配置生效後,配置與master的連接:
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.84.137',
-> MASTER_USER='replication',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=1087;
其中MASTER_HOST是master機的ip,MASTER_USER和MASTER_PASSWORD就是我們剛才在master上添加的用戶,MASTER_LOG_FILE和MASTER_LOG_POS對應與master status里的信息
slave:mysql> show slave status/G;
B. mysql主從同步 如何同步已有的數據,
--主機開兩個窗口,一個進入mysql,一個是shell
--主機阻斷寫操作
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 1529881 | openser | mysql,test |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
--另外一個窗口導出主機資料庫
mysqlmp -u root -p123456 --opt -R openser > openser20121203.sql
--剛才的窗口主機解鎖
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
mysql>
--打包數據文件到從機
drop database openser;
create database openser;
mysql -u root -p123456 openser < openser20121127.sql
--從機操作
SLAVE STOP;
reset slave;
CHANGE MASTER TO MASTER_HOST='192.168.21.26',
MASTER_USER='repl_user',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=1529881;
start slave;
show slave status\G
C. mysql資料庫dtid同步如何追加
--主機開兩個窗口,一個進入mysql,一個是shell
--主機阻斷寫操作
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 1529881 | openser | mysql,test |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
--另外一個窗口導出主機資料庫
mysqlmp -u root -p123456 --opt -R openser > openser20121203.sql
--剛才的窗口主機解鎖
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
mysql>
--打包數據文件到從機
drop database openser;
create database openser;
mysql -u root -p123456 openser < openser20121127.sql
--從機操作
SLAVE STOP;
reset slave;
CHANGE MASTER TO MASTER_HOST='192.168.21.26',
MASTER_USER='repl_user',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=1529881;
start slave;
show slave status\G
D. 怎樣實現MySQL資料庫雙機熱備份 MySQL數據同步
還好MySQL資料庫提供了一種主從備份的機制,其實就是把主資料庫的所有的數據同時寫到備份資料庫中。實現MySQL資料庫的熱備份。 2、要想實現雙機的熱備首先要了解主從資料庫伺服器的版本的需求。要實現熱備MySQL的版本都要高於3.2,還有一個基本的原則就是作為從資料庫的資料庫版本可以高於主伺服器資料庫的版本,但是不可以低於主伺服器的資料庫版本。 3、設置主資料庫伺服器: a.首先查看主伺服器的版本是否是支持熱備的版本。然後查看my.cnf(類Unix)或者my.ini(Windows)中MySQLd配置塊的配置有沒有log-bin(記錄資料庫更改日誌),因為MySQL的復制機制是基於日誌的復制機制,所以主伺服器一定要支持更改日誌才行。然後設置要寫入日誌的資料庫或者不要寫入日誌的資料庫。這樣只有您感興趣的資料庫的更改才寫入到資料庫的日誌中。 server-id=1 //資料庫的id這個應該默認是1就不用改動 log-bin=log_name //日誌文件的名稱, //這里可以制定日誌到別的目錄 如果沒有設置則默認主機名的一個日誌名稱 binlog-do-db=db_name //記錄日誌的資料庫 binlog-ignore-db=db_name //不記錄日誌的資料庫以上的如果有多個資料庫用","分割開 然後設置同步資料庫的用戶賬號 MySQL> GRANT REPLICATION SLAVE ON *.* -> TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';4.0.2以前的版本, 因為不支持REPLICATION 要使用下面的語句來實現這個功能 MySQL> GRANT FILE ON *.* -> TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';設置好主伺服器的配置文件後重新啟動資料庫 b.鎖定現有的資料庫並備份現在的數據 鎖定資料庫 MySQL> FLUSH TABLES WITH READ LOCK;備份資料庫有兩種辦法一種是直接進入到MySQL的data目錄然後打包你需要備份資料庫的文件夾,第二種是使用MySQLmp的方式來備份資料庫但是要加上"--master-data " 這個參數,建議使用第一種方法來備份資料庫
E. 如何利用mysqlmp備份MySQL資料庫
一、數據備份的重要性
工作中,如果意外刪除了重要的文件或者目錄的話,那結果可就慘了。尤其是當誤刪除的數據涉及重要的客戶或者關鍵項目,並且這些數據無法輕易重新創建的時候,那滋味,不用我說你也能想像得到。不巧的是,像這樣的數據在公司環境中隨處可見,例如銷售記錄、客戶聯系方式,等等。
二、關於mysqlmp
MySQL自身提供了許多命令行工具,例如mysql工具可以用來與MySQL的資料庫模式、數據、用戶和配置變數進行交互,而mysqladmin工具則可以進行各種管理任務,還有就是下面將要介紹的mysqlmp。此外還有很多,不過那超出了本文的討論范圍。工具mysqlmp既可以用來備份資料庫模式,還可以用來備份數據;利用它,我們不僅可以對一個伺服器上的所有資料庫進行地毯式的備份,同時我們還可以選擇性地備份某個資料庫,甚至資料庫中指定的某些表。
當在伺服器上安裝MySQL的時候,應修改系統路徑以便使全局命令行可以訪問各個客戶程序。打開終端窗口,並執行下列命令:%>mysqlmp Usage: mysqlmp [OPTIONS] database [tables] OR mysqlmp [OPTIONS]
databases [OPTIONS] DB1 [DB2 DB3...] OR mysqlmp [OPTIONS] all-databases [OPTIONS]
For more options, use mysqlmp help
這里給出了使用mysqlmp程序的方法。舉例來說,若要備份所有資料庫模式和數據至文件backup092210.sql的話,可以執行如下所示的命令:%>mysqlmp -u root -p all-databases > backup092210.sql Enter password:
這里,為了能夠訪問所有資料庫,我們需要一個root許可權,所以這里需要在提示符後面輸入相應口令。此外,如果你是在開發用的伺服器上練習這些命令的話,不妨花一些時間看看備份文件的內容。這時您會看到一系列的SQL語句,先是刪除各個表後重新創建的語句,然後是重新創建相關數據的語句。另外,由於上面的例子中我們對所有資料庫進行備份,所以您還會發現,備份文件將創建每個資料庫(如果它還沒有存在的話),然後通過USE命令切換到該資料庫,進而創建與該資料庫相關的表跟數據。
若要備份單個資料庫,例如要備份名為wiki的資料庫到一個名為wiki-backup092210.sql的文件中,我們可以使用如下所示的命令:%>mysqlmp -u root -p wiki > wiki-backup092210.sql Enter password:
最後,若要備份資料庫中名為users的表的話,例如要把它備份到名為wikiusers-backup092210.sql的文件中,我們可以使用如下所示的命令:%>mysqlmp -u root -p wiki users > wikiusers-backup092210.sql Enter password:
三、調整備份內容
有時候,我們可能只想備份資料庫的模式,或者只想備份資料庫的數據。為了備份資料庫模式,可以向mysqlmp傳遞參數no-data,如下所示:%>mysqlmp -u root -p no-data wiki > wiki-backup092210.sql
為了只備份資料庫的數據,可以向mysqlmp使用參數no-create-info,如下所示:%>mysqlmp -u root -p no-create-info wiki > wiki-backup092210.sql
對於前面所舉的例子,僅需要少量的擊鍵次數就能執行mysqlmp命令。然而,工作中要乾的活還有很多,並且如果老是執行這些命令的話,那麼生活就會變得太單調了。因此,我們可以設法使這些過程自動化,這時我們可以藉助cron工具來達成我們的目標,這個工具在所有類UNIX操作系統上都能找到。為了自動執行備份任務,我們需要新建一個正確命名的文件。例如nightly-backup.sh,具體命令如下所示:#!/bin/sh mysqlmp -uroot -psecret wiki > /home/backup/sql/wiki-backup-`date +%m%d%Y`.sql
接下來,我們將這個腳本提供交給cron,方法是使用crontab。為此,我們可以執行如下所示的命令:%>crontab -e
這將打開當前登錄用戶的crontab文件,如果該文件不存在的話就會自動新建一個。在這個文件中,我們可以添加如下內容,來確保每天上午3時運行該備份腳本:0 3 * * * /home/backup/scripts/nightly-backup.sh
如果您對crontab的語法很陌生的話,這里的參數可能讓您摸不著頭腦。這里前五個參數分別對應於執行腳本的時間,依次為分、時、日、月和星期幾。因此,要想在每星期二的4:45am執行腳本的話,可以使用參數45 4 * * 3。
插入上面所示的一行內容後,保存文件,那麼我們的任務就會開始按照給定時間調度執行。 需要注意的是,第二天早上一定要查看相應的目錄,看看事情是否一切正常。
五、其它備份方案
就像本文前面所說的那樣,mysqlmp只是MySQL眾多備份方案中的一個。此外,您還可以使用MySQL的二進制日誌文件進行增量備份,或者使用從MySQL主伺服器中將數據復制到從伺服器中。
六、小結本文中,我們與讀者一道建立了一個簡單的MySQL備份解決方案。如果您之前還未實施任何解決方案的話,不妨立即動手試一下。重要的是,這只需要花費您幾分鍾的時間,我想這是很劃得來的。
F. mysqlmp 怎麼導入資料庫
mysqlmp是用來做備份資料庫的;
有兩種方法可導入資料庫(表)
(1)導入資料庫
在本地資料庫中創建相對應導出的資料庫mydb同名的資料庫:
mysql> create database mydb;
然後退出資料庫,再使用以下的 命令導入資料庫文件mydb.bak到本地資料庫mydb中:
mysql -uroot -p123456 mydb < /root/data/mydb.bak;
或者進入mysql中,使用source指令完成資料庫導入,如下:
mysql> source /root/data/mydb.bak; // /root/data/mydb.bak是遠程資料庫mydb導出文件的本地存放位置
(2)導入數據表
在本地資料庫中創建相對應導出的資料庫mydb同名的資料庫:
mysql> create database mydb;
然後在mysql中使用source指令來完成數據表的導入,如下:
mysql> source /root/data/tb1.bak; // /root/data/tb1.bak是遠程數據表tb1導出文件的本地存放位置
G. 怎麼實現熱機同步自動備份資料庫
B)上,並且刪除早於當前日期3 天的數據,或者是進行差異或增量備份,B 機
器沒有安裝SQL 只是共享目錄,(需要注意的是,我不打算將庫文件備份到本
機A,而是直接備份到B,資料庫龐大,A 的空間有限),本人對SQL 了解甚
少,如能寫出詳細步驟,及用到的語句,達到我的目的。
一個雙機備份的實例:
1.為資料庫伺服器(如伺服器名為DbaseServ)中的資料庫建立定期備份作業,這
個你應該會。
2.將數據伺服器存放資料庫備文份件的文件夾置成共享。
3.在另外一台機器(目標機)上寫一個批處理文件(打開記事本,按下面格式錄
入DOS 命令,保存為DBBACKUP.BAT。
格式:x \\數據伺服器名\數據伺服器共享的備份文件文件夾\庫名.* 本機硬碟\*.*/m舉例:XCOPY \\DbaseServ\backupdata\employee.* d:\databackup\*.* /m
如果備份文件夾映射了網路驅動器(如F:,資料庫備份文件是employee),並且本
機不作保留,就這樣:
XCOPY F:\employee.* d:\databackup\*.* /m
DEL /Q /A:A F:\EMPLOYEE.*
4.在該目標機器上建立「任務計劃」(點控制面板,添加任務計劃,通過瀏覽選
擇建立的那個批文件(如DBBACKUP.BAT),設置周期及備份時間(要與伺服器
上的數據備份作業大致錯後一點(如一小時)。
這樣,系統就會在每次數據伺服器資料庫備份後,自動將無存檔標記的文件備份
到目標機,並將備份成功的文件加入存檔標記,保證下次不重復備份。
未成功備份的當然不刪除,下將還要再試著備份。
打開SQL2000 企業管理器. 下面有個數據維護計劃. (根據裡面的提示一步一
步按照自己的要求進行設置就行了。)
在上面點右鍵,新建維護計劃,裡面按你的要求設置就行了。(這里選擇你需要備
H. 如何設置MySQL同步
MySQL 提供了資料庫的同步功能,這對我們實現資料庫的冗災、備份、恢復、負載均衡等都是有極大幫助的。本文描述了常見的同步設置方法。
一、准備伺服器
由於MySQL不同版本之間的(二進制日誌)binlog格式可能會不一樣,因此最好的搭配組合是Master的MySQL版本和Slave的版本相同或者更低,Master的版本肯定不能高於Slave版本。
本文中,我們假設主伺服器(以下簡稱Master)和從伺服器(以下簡稱Slave)的版本都是5.0.15,操作系統是Linux Ubuntu 5.0.x。
假設同步Master的主機名為:rep1,Slave主機名為:rep2,2個MySQL的basedir目錄都是/usr/local/mysql,datadir都是:/usr/local/mysql/data。
二、設置同步伺服器
1、設置同步Master
每個同步伺服器都必須設定一個唯一的編號,否則同步就不能正常運行了。接下來開始修改 my.cnf,增加以下幾行:
server-id = 1
log-bin
set-variable=binlog-ignore-db=mysql
然後在Master上增加一個賬號專門用於同步,如下:
mysql>GRANT REPLICATION SLAVE ON *.* TO rep@rep2 IDENTIFIED BY 'rep';
如果想要在Slave上有許可權執行 "LOAD TABLE FROM MASTER" 或 "LOAD DATA FROM MASTER" 語句的話,必須授予全局的 FILE 和 SELECT 許可權:
mysql>GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO rep@rep2 IDENTIFIED BY 'rep';
第三行表示不記錄資料庫mysql的更新日誌,這就避免了Master上的許可權設置等被同步到Slave上,如果對這方面沒有限制,就可以不設置這個參數。
接下來備份Master上的數據,首先執行如下SQL語句:
mysql>FLUSH TABLES WITH READ LOCK;
不要退出這個終端,否則這個鎖就不生效了;接著導出數據,可以直接打包壓縮數據文件,也可以使用mysqlmp工具來做,推薦前者的方法,這樣更為快捷簡便。
root$cd /usr/local/mysql
root$tar zcf data.tar.gz ./data (在這里也可能是 "var" 等其它實際存放數據文件的目錄,根據實情而定)
然後將這些數據拷貝到Slave伺服器上,解開,設置好正確的許可權及屬主等;之後,執行 "UNLOCK TABLES" 語句來釋放鎖。
2、設置Slave
修改my.cnf,增加如下幾行:
server-id = 2
master-host = rep1 #主伺服器名
master-user = rep #同步賬戶名,默認是test
master-password = rep #同步帳戶密碼,默認是空
master-port = 3306 #主伺服器的 TCP/IP 埠號,默認是3306
set-variable=replicate-ignore-db=mysql #略過同步的資料庫名,如果有多個,請設置多次
set-variable=replicate-do-db=yejr #想要同步的資料庫名,如果有多個,請設置多次
接下來在Slave上檢驗一下是否能正確連接到Master上,並且具備相應的許可權。
root$mysql -hrep1 -urep -prep
mysql>SHOW GRANTS;
+------------------------------------------------------------------------------+
| Grants for rep@rep2 |
+------------------------------------------------------------------------------+
| GRANT SELECT, FILE, REPLICATION SLAVE ON *.* TO 'rep'@'rep2' IDENTIFIED BY
PASSWORD '*' |
+------------------------------------------------------------------------------+
現在,可以啟動Slave了。啟動成功後,登錄Slave,查看一下同步狀態:
mysql -hlocalhost -uroot
mysql>SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: rep1
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000001
Read_Master_Log_Pos: 98
Relay_Log_File: relay.000003
Relay_Log_Pos: 232
Relay_Master_Log_File: binlog.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 98
Relay_Log_Space: 232
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
1 row in set (0.00 sec)
可以看到,Slave_IO_Running 和 Slave_SQL_Running 兩列的值都為 "Yes",這表明 Slave 的 I/O 和 SQL 線程都在正常運行。
至此,同步設定成功。
三、同步設定FAQ