MySQL數據同步主要有三種方式:
1.利用MySQL自身的資料庫同步功能
2.利用MySQL資料庫的特性(資料庫存在固頂目錄,並且以文件形式存儲),進行資料庫目錄同步以達到數據同步目的
3.利用專用的MySQL資料庫同步軟體
1.利用MySQL自身的資料庫同步功能(下面參考自網上的文章,寫的非常詳細了)
MySQL從3.23.15版本以後提供資料庫復制功能。利用該功能可以實現兩個資料庫同步,主從模式,互相備份模式的功能.
資料庫同步復制功能的設置都在mysql的設置文件中體現。mysql的配置文件(一般是my.cnf),在unix環境下在/etc/mysql/my.cnf或者在mysql用戶的home目錄下的my.cnf。
windows環境中,如果c:根目錄下有my.cnf文件則取該配置文件。當運行mysql的winmysqladmin.exe工具時候,該工具會把c:根目錄下的my.cnf命名為mycnf.bak。並在winnt目錄下創建my.ini。mysql伺服器啟動時候會讀該配置文件。所以可以把my.cnf中的內容拷貝到my.ini文件中,用my.ini文件作為mysql伺服器的配置文件。
設置方法:
設置範例環境:
操作系統:window2000professional
mysql:4.0.4-beta-max-nt-log
Aip:10.10.10.22
Bip:10.10.10.53
A:設置
1.增加一個用戶最為同步的用戶帳號:
GRANTFILEON*.*TObackup@'10.10.10.53'IDENTIFIEDBY『1234』
2.增加一個資料庫作為同步資料庫:
createdatabasebackup
B:設置
1.增加一個用戶最為同步的用戶帳號:
GRANTFILEON*.*TObackup@'10.10.10.22'IDENTIFIEDBY『1234』
2.增加一個資料庫作為同步資料庫:
createdatabasebackup
主從模式:A->B
A為master
修改Amysql的my.ini文件。在mysqld配置項中加入下面配置:
server-id=1
log-bin
#設置需要記錄log可以設置log-bin=c:mysqlbakmysqllog設置日誌文件的目錄,
#其中mysqllog是日誌文件的名稱,mysql將建立不同擴展名,文件名為mysqllog的幾個日誌文件。
binlog-do-db=backup#指定需要日誌的資料庫
重起資料庫服務。
用showmasterstatus命令看日誌情況。
B為slave
修改Bmysql的my.ini文件。在mysqld配置項中加入下面配置:
server-id=2
master-host=10.10.10.22
master-user=backup#同步用戶帳號
master-password=1234
master-port=3306
master-connect-retry=60預設重試間隔60秒
replicate-do-db=backup告訴slave只做backup資料庫的更新
重起資料庫
用showslavestatus看同步配置情況。
注意:由於設置了slave的配置信息,mysql在資料庫目錄下生成master.info
所以如有要修改相關slave的配置要先刪除該文件。否則修改的配置不能生效。
雙機互備模式。
如果在A加入slave設置,在B加入master設置,則可以做B->A的同步。
在A的配置文件中mysqld配置項加入以下設置:
master-host=10.10.10.53
master-user=backup
master-password=1234
replicate-do-db=backup
master-connect-retry=10
在B的配置文件中mysqld配置項加入以下設置:
log-bin=c:mysqllogmysqllog
binlog-do-db=backup
注意:當有錯誤產生時*.err日誌文件。同步的線程退出,當糾正錯誤後要讓同步機制進行工作,運行slavestart
重起AB機器,則可以實現雙向的熱備。
測試:
向B批量插入大數據量表AA(1872000)條
A資料庫每秒鍾可以更新2500條數據。
2.資料庫目錄同步,方法和文件同步一樣,設置好需要同步的兩個資料庫目錄就可以了!
缺點很明顯,數據同步只能單向進行,可以作為備份方案
3.用專用的MySQL同步軟體進行同步
這方面的軟體有SQLBalance和MyReplicator,優點是方便直觀,還有很多爭強功能!
缺點和2一樣,只能單項同步!
當然你也可以修改鏡像網站的程序為提交數據到母資料庫,讀取則在當前鏡像下的數據,不過,修改起來麻煩!普通用戶修改也非常難!呵呵,大家了解一下就可以!給大家一個思路!有能力的朋友可以試試阿!
4.關於MySQL論壇的數據同步
由於數據來源的不可控制(不好表達),論壇數據是實時的,而且還要考慮來自鏡像論壇的數據,如何實現鏡像論壇與母論壇數據同步呢?
用1中介紹的MySQL自帶的資料庫同步功能互相備份模式就可以實現的!
不過,具體的應用我沒有測試!穩定性不敢保證!
有能力的朋友推薦用下面這種思路來同步,相對來說減少點效率,但能減少發生的錯誤!
比如鏡像論壇數據同步:
1.母論壇和鏡像論壇的數據全寫在母論壇資料庫里,主從模式,讀取只在本地讀取,這個需要修改程序!
2.每次寫數據,都同時提交到兩個資料庫中,安全,但是效率很差,也得修改程序!
MSSQL
MSSQL數據同步利用資料庫復制技術實現數據同步更新(來自網路,也是非常完美的教程)
復制的概念
復制是將一組數據從一個數據源拷貝到多個數據源的技術,是將一份數據發布到多個存儲站點上的有效方式。使用復制技術,用戶可以將一份數據發布到多台伺服器上,從而使不同的伺服器用戶都可以在許可權的許可的范圍內共享這份數據。復制技術可以確保分布在不同地點的數據自動同步更新,從而保證數據的一致性。
SQL復制的基本元素包括
出版伺服器、訂閱伺服器、分發伺服器、出版物、文章
SQL復制的工作原理
SQLSERVER主要採用出版物、訂閱的方式來處理復制。源數據所在的伺服器是出版伺服器,負責發表數據。出版伺服器把要發表的數據的所有改變情況的拷貝復制到分發伺服器,分發伺服器包含有一個分發資料庫,可接收數據的所有改變,並保存這些改變,再把這些改變分發給訂閱伺服器
SQLSERVER復制技術類型
SQLSERVER提供了三種復制技術,分別是:
1、快照復制(呆會我們就使用這個)
2、事務復制
3、合並復制
只要把上面這些概念弄清楚了那麼對復制也就有了一定的理解。接下來我們就一步一步來實現復制的步驟。
第一先來配置出版伺服器
(1)選中指定[伺服器]節點
(2)從[工具]下拉菜單的[復制]子菜單中選擇[發布、訂閱伺服器和分發]命令
(3)系統彈出一個對話框點[下一步]然後看著提示一直操作到完成。
(4)當完成了出版伺服器的設置以後系統會為該伺服器的樹形結構中添加一個復制監視器。同時也生成一個分發資料庫(distribution)
第二創建出版物
(1)選中指定的伺服器
(2)從[工具]菜單的[復制]子菜單中選擇[創建和管理發布]命令。此時系統會彈出一個對話框
(3)選擇要創建出版物的資料庫,然後單擊[創建發布]
(4)在[創建發布向導]的提示對話框中單擊[下一步]系統就會彈出一個對話框。對話框上的內容是復制的三個類型。我們現在選第一個也就是默認的快照發布(其他兩個大家可以去看看幫助)
(5)單擊[下一步]系統要求指定可以訂閱該發布的資料庫伺服器類型,SQLSERVER允許在不同的資料庫如ORACLE或ACCESS之間進行數據復制。但是在這里我們選擇運行"SQLSERVER2000"的資料庫伺服器
(6)單擊[下一步]系統就彈出一個定義文章的對話框也就是選擇要出版的表
(7)然後[下一步]直到操作完成。當完成出版物的創建後創建出版物的資料庫也就變成了一個共享資料庫。
第三設計訂閱
(1)選中指定的訂閱伺服器
(2)從[工具]下拉菜單中選擇[復制]子菜單的[請求訂閱]
(3)按照單擊[下一步]操作直到系統會提示檢查SQLSERVER代理服務的運行狀態,執行復制操作的前提條件是SQLSERVER代理服務必須已經啟動。
(4)單擊[完成]。完成訂閱操作。
完成上面的步驟其實復制也就是成功了。但是如何來知道復制是否成功了呢?這里可以通過這種方法來快速看是否成功。展開出版伺服器下面的復制——發布內容——右鍵發布內容——屬性——擊活——狀態然後點立即運行代理程序接著點代理程序屬性擊活調度把調度設置為每一天發生,每一分鍾,在0:00:00和23:59:59之間。接下來就是判斷復制是否成功了打開C:/ProgramFiles/MicrosoftSQLServer/MSSQL/REPLDATA/unc/XIAOWANGZI_database_database下面看是不是有一些以時間做為文件名的文件夾差不多一分中就產生一個。要是你還不信的話就打開你的資料庫看在訂閱的伺服器的指定訂閱資料庫下看是不是看到了你剛才所發布的表—
一個手工同步的方案
--定時同步伺服器上的數據
--例子:
--測試環境,SQLServer2000,遠程伺服器名:xz,用戶名為:sa,無密碼,測試資料庫:test
--伺服器上的表(查詢分析器連接到伺服器上創建)
createtable[user](idintprimarykey,numbervarchar(4),namevarchar(10))
go
--以下在區域網(本機操作)
--本機的表,state說明:null表示新增記錄,1表示修改過的記錄,0表示無變化的記錄
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[user]')andOBJECTPROPERTY(id,N'IsUserTable')=1)
droptable[user]
GO
createtable[user](idintidentity(1,1),numbervarchar(4),namevarchar(10),statebit)
go
--創建觸發器,維護state欄位的值
createtriggert_stateon[user]
afterupdate
as
update[user]setstate=1
from[user]ajoininsertedbona.id=b.id
wherea.stateisnotnull
go
--為了方便同步處理,創建鏈接伺服器到要同步的伺服器
--這里的遠程伺服器名為:xz,用戶名為:sa,無密碼
ifexists(select1frommaster..sysserverswheresrvname='srv_lnk')
execsp_dropserver'srv_lnk','droplogins'
go
execsp_addlinkedserver'srv_lnk','','SQLOLEDB','xz'
execsp_addlinkedsrvlogin'srv_lnk','false',null,'sa'
go
--創建同步處理的存儲過程
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_synchro]')andOBJECTPROPERTY(id,N'IsProcere')=1)
dropprocere[dbo].[p_synchro]
GO
createprocp_synchro
as
--setXACT_ABORTon
--啟動遠程伺服器的MSDTC服務
--execmaster..xp_cmdshell'isql/S"xz"/U"sa"/P""/q"execmaster..xp_cmdshell''netstartmsdtc'',no_output"',no_output
--啟動本機的MSDTC服務
--execmaster..xp_cmdshell'netstartmsdtc',no_output
--進行分布事務處理,如果表用標識列做主鍵,用下面的方法
--BEGINDISTRIBUTEDTRANSACTION
--同步刪除的數據
deletefromsrv_lnk.test.dbo.[user]
whereidnotin(selectidfrom[user])
--同步新增的數據
insertintosrv_lnk.test.dbo.[user]
selectid,number,namefrom[user]wherestateisnull
--同步修改的數據
updatesrv_lnk.test.dbo.[user]set
number=b.number,name=b.name
fromsrv_lnk.test.dbo.[user]a
join[user]bona.id=b.id
whereb.state=1
--同步後更新本機的標志
update[user]setstate=0whereisnull(state,1)=1
--COMMITTRAN
go
--創建作業,定時執行數據同步的存儲過程
ifexists(SELECT1frommsdb..sysjobswherename='數據處理')
EXECUTEmsdb.dbo.sp_delete_job@job_name='數據處理'
execmsdb..sp_add_job@job_name='數據處理'
--創建作業步驟
declare@sqlvarchar(800),@dbnamevarchar(250)
select@sql='execp_synchro'--數據處理的命令
,@dbname=db_name()--執行數據處理的資料庫名
execmsdb..sp_add_jobstep@job_name='數據處理',
@step_name='數據同步',
@subsystem='TSQL',
@database_name=@dbname,
@command=@sql,
@retry_attempts=5,--重試次數
@retry_interval=5--重試間隔
--創建調度
EXECmsdb..sp_add_jobschele@job_name='數據處理',
@name='時間安排',
@freq_type=4,--每天
@freq_interval=1,--每天執行一次
@active_start_time=00000--0點執行
go
⑵ mysql怎麼合並資料庫 centos
直接將查詢結果導入臨時表:
CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name
B、另外mysql也允許你在內存中直接創建臨時表,因為是在內存中所有速度會很快,語法如下:
CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
) TYPE = HEAP
⑶ 什麼是MySql資料庫
MySQL資料庫:
MySQL是一種開放源代碼的關系型資料庫管理系統(RDBMS),使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。
MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。
MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
資料庫簡介:
MySQL是一種開放源代碼的關系型資料庫管理系統(RDBMS),MySQL資料庫系統使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。
由於MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
MySQL這個名字,起源不是很明確。一個比較有影響的說法是,基本指南和大量的庫和工具帶有前綴「my」已經有10年以上,而且不管怎樣,MySQL AB創始人之一的Monty Widenius的女兒也叫My。這兩個到底是哪一個給出了MySQL這個名字至今依然是個迷,包括開發者在內也不知道。
MySQL的海豚標志的名字叫「sakila」,它是由MySQL AB的創始人從用戶在「海豚命名」的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者Ambrose Twebaze提供。根據Ambrose所說,Sakila來自一種叫SiSwati的史瓦濟蘭方言,也是在Ambrose的家鄉烏干達附近的坦尚尼亞的Arusha的一個小鎮的名字。
MySQL,雖然功能未必很強大,但因為它的開源、廣泛傳播,導致很多人都了解到這個資料庫。它的歷史也富有傳奇性。
MySQL資料庫歷史:
MySQL的歷史最早可以追溯到1979年,那時Oracle也才小打小鬧,微軟的SQL Server影子都沒有。有一個人叫Monty Widenius, 為一個叫TcX的小公司打工,並用BASIC設計了一個報表工具,可以在4M主頻和16KB內存的計算機上運行。過了不久,又將此工具,使用C語言重寫,移植到Unix平台,當時,它只是一個很底層的面向報表的存儲引擎。這個工具叫做Unireg。
可是,這個小公司資源有限,Monty天賦極高,面對資源有限的不利條件,他反而更能發揮潛能,總是力圖寫出最高效的代碼。並因此養成了習慣。與Monty同在一起的還有一些別的同事,很少有人能堅持把那些代碼持續寫到20年後,而Monty卻做到了。
1990年,TcX的customer 中開始有人要求要為它的API提供SQL支持,當時,有人想到了直接使用商用資料庫算了,但是Monty覺得商用資料庫的速度難令人滿意。於是,他直接藉助於mSQL的代碼,將它集成到自己的存儲引擎中。但不巧的是,效果並不太好。於是, Monty雄心大起,決心自己重寫一個SQL支持。
1996年,MySQL 1.0發布,只面向一小撥人,相當於內部發布。到了96年10月,MySQL 3.11.1發布了,呵呵,沒有2.x版本。最開始,只提供了Solaris下的二進製版本。一個月後,Linux版本出現了。
緊接下來的兩年裡,MySQL依次移植到各個平台下。它發布時,採用的許可策略,有些與眾不同:允許免費商用,但是不能將MySQL與自己的產品綁定在一起發布。如果想一起發布,就必須使用特殊許可,意味著要花銀子。當然,商業支持也是需要花銀子的。其它的,隨用戶怎麼用都可以。這種特殊許可為MySQL帶來了一些收入,從而為它的持續發展打下了良好的基礎。(細想想,PostgreSQL曾經有幾年限入低谷,可能與它的完全免費,不受任何限制有關系)。
MySQL3.22應該是一個標志性的版本,提供了基本的SQL支持。
MySQL關系型資料庫於1998年1月發行第一個版本。它使用系統核心提供的多線程機制提供完全的多線程運行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等編程語言的編程介面(APIs),支持多種欄位類型並且提供了完整的操作符支持查詢中的SELECT和WHERE操作。
MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。
1999-2000年,有一家公司在瑞典成立了,叫MySQL AB (AB是瑞典語「股份公司」的意思)。 雇了幾個人,與Sleepycat合作,開發出了 Berkeley DB引擎, 因為BDB支持事務處理,所以,MySQL從此開始支持事務處理了。
2000年4月,MySQL對舊的存儲引擎進行了整理,命名為MyISAM。同時,2001年,Heikiki Tuuri向MySQL提出建議,希望能集成他們的存儲引擎InnoDB,這個引擎同樣支持事務處理,還支持行級鎖。
如今,遺憾的是,BDB和InnoDB好像都被Oracle收購了,為了消滅競爭對手,哪怕是開源的,都是不擇手段。
MySQL與InnoDB的正式結合版本是4.0。
到了MySQL5.0,2003年12月,開始有View,存儲過程之類的東東,當然,其間, bug也挺多。
在2008年1月16號 MySQL被Sun公司收購。
最近,MySQL的創始人Monty Widenius已經向Sun提交了辭呈。head都要走了。
據說,被Sun收購的公司多薄命,不知道MySQL今後前途如何,希望一路走好。相信MySQL的生命力還是很長久的。
時至今日 mysql 和 php 的結合絕對是完美.很多大型的網站也用到mysql資料庫.mysql的發展前景是非常光明的!
MySQL常用命令:
1:使用SHOW語句找出在伺服器上當前存在什麼資料庫:
mysql> SHOW DATABASES;
2:2、創建一個資料庫MYSQLDATA
mysql> CREATE DATABASE MYSQLDATA;
3:選擇你所創建的資料庫
mysql> USE MYSQLDATA; (按回車鍵出現Database changed 時說明操作成功!)
4:查看現在的資料庫中存在什麼表
mysql> SHOW TABLES;
5:創建一個資料庫表
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:顯示表的結構:
mysql> DESCRIBE MYTABLE;
7:往表中加入記錄
mysql> insert into MYTABLE values (」hyq」,」M」);
8:用文本方式將數據裝入資料庫表中(例如D:/mysql.txt)
mysql> LOAD DATA LOCAL INFILE 「D:/mysql.txt」 INTO TABLE MYTABLE;
9:導入.sql文件命令(例如D:/mysql.sql)
mysql>use database;
mysql>source d:/mysql.sql;
10:刪除表
mysql>drop TABLE MYTABLE;
11:清空表
mysql>delete from MYTABLE;
12:更新表中數據
mysql>update MYTABLE set sex=」f」 where name=』hyq』;
全局管理許可權對應解釋:
FILE: 在MySQL伺服器上讀寫文件。
PROCESS: 顯示或殺死屬於其它用戶的服務線程。
RELOAD: 重載訪問控製表,刷新日誌等。
SHUTDOWN: 關閉MySQL服務。
資料庫/數據表/數據列許可權:
ALTER: 修改已存在的數據表(例如增加/刪除列)和索引。
CREATE: 建立新的資料庫或數據表。
DELETE: 刪除表的記錄。
DROP: 刪除數據表或資料庫。
INDEX: 建立或刪除索引。
INSERT: 增加表的記錄。
SELECT: 顯示/搜索表的記錄。
UPDATE: 修改表中已存在的記錄。
特別的許可權:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登錄–其它什麼也不允許做。
MySQL資料庫導入方法:
MySQL資料庫的導入,有兩種方法:
1) 先導出資料庫SQL腳本,再導入;
2) 直接拷貝資料庫目錄和文件。
在不同操作系統或MySQL版本情況下,直接拷貝文件的方法可能會有不兼容的情況發生。
所以一般推薦用SQL腳本形式導入。下面分別介紹兩種方法。
2. 方法一 SQL腳本形式
操作步驟如下:
2.1. 導出SQL腳本
在原資料庫伺服器上,可以用phpMyAdmin工具,或者mysqlmp命令行,導出SQL腳本。
2.1.1 用phpMyAdmin工具
導出選項中,選擇導出「結構」和「數據」,不要添加「DROP DATABASE」和「DROP TABLE」選項。
選中「另存為文件」選項,如果數據比較多,可以選中「gzipped」選項。
將導出的SQL文件保存下來。
2.1.2 用mysqlmp命令行
命令格式
mysqlmp -u 用戶名 -p 資料庫名 > 資料庫名.sql
範例:
mysqlmp -u root -p abc > abc.sql
(導出資料庫abc到abc.sql文件)
提示輸入密碼時,輸入該資料庫用戶名的密碼。
2.2. 創建空的資料庫
通過主控界面/控制面板,創建一個資料庫。假設資料庫名為abc,資料庫全權用戶為abc_f。
2.3. 將SQL腳本導入執行
同樣是兩種方法,一種用phpMyAdmin(mysql資料庫管理)工具,或者mysql命令行。
2.3.1 用phpMyAdmin工具
從控制面板,選擇創建的空資料庫,點「管理」,進入管理工具頁面。
在"SQL"菜單中,瀏覽選擇剛才導出的SQL文件,點擊「執行」以上載並執行。
注意:phpMyAdmin對上載的文件大小有限制,php本身對上載文件大小也有限制,如果原始sql文件
比較大,可以先用gzip對它進行壓縮,對於sql文件這樣的文本文件,可獲得1:5或更高的壓縮率。
gzip使用方法:
# gzip xxxxx.sql
得到
xxxxx.sql.gz文件。
提示輸入密碼時,輸入該資料庫用戶名的密碼。
3 直接拷貝
如果資料庫比較大,可以考慮用直接拷貝的方法,但不同版本和操作系統之間可能不兼容,要慎用。
3.1 准備原始文件
用tar打包為一個文件
3.2 創建空資料庫
3.3 解壓
在臨時目錄中解壓,如:
cd /tmp
tar zxf mydb.tar.gz
3.4 拷貝
將解壓後的資料庫文件拷貝到相關目錄
cd mydb/
cp * /var/lib/mysql/mydb/
對於FreeBSD:
cp * /var/db/mysql/mydb/
3.5 許可權設置
將拷貝過去的文件的屬主改為mysql:mysql,許可權改為660
chown mysql:mysql /var/lib/mysql/mydb/*
chmod 660 /var/lib/mysql/mydb/*
Mssql轉換mysql的方法:
1.導表結構
使用MySQL生成create腳本的方法。找到生成要導出的腳本,按MySQL的語法修改一下到MySQL資料庫中創建該表的列結構什麼的。
2.導表數據
在MSSQL端使用bcp導出文本文件:
bcp 「Select * FROM dbname.dbo.tablename;」 queryout tablename.txt -c -Slocalhostdb2005 -Usa
其中」"中是要導出的sql語句,-c指定使用 進行欄位分隔,使用 進行記錄分隔,-S指定資料庫伺服器及實例,-U指定用戶名,-P指定密碼.
在MySQL端使用mysqlimport 導入文本文件到相應表中
mysqlimport -uroot -p databasename /home/test/tablename.txt
其中-u指定用戶名,-p指定密碼,databasename指定資料庫名稱,表名與文件名相同
MySQL備份與恢復:
MySQL備份恢復數據的一般步驟
備份一個資料庫的例子:
1、備份前讀鎖定涉及的表
mysql>LOCK TABLES tbl1 READ,tbl1 READ,…
如果,你在mysqlmp實用程序中使用--lock-tables選項則不必使用如上SQL語句。
2、導出資料庫中表的結構和數據
shell>mysqlmp --opt db_name>db_name.sql
3、啟用新的更新日誌
shell>mysqladmin flush-logs
這樣可以記錄你備份後的數據改變為恢復數據准備。
4、解除表的讀鎖
mysql>UNLOCK TABLES;
為了加速上述過程,你可以這樣做:
shell> mysqlmp --lock-tables --opt db_name>db_name.sql; mysqladmin flush-logs
但是這樣可能會有點小問題。上命令在啟用新的更新日誌前就恢復表的讀鎖,
在更新繁忙的站點,可能有備份後的更新數據沒有記錄在新的日誌中。
現在恢復上面備份的資料庫
1、對涉及的表使用寫鎖
mysql>LOCK TABLES tbl1 WRITE,tbl1 WRITE,…
2、恢復備份的數據
shell>mysql db_name < db_name.sql
3、恢復更新日誌的內容
shell>mysql --one-database db_name < hostname.nnn
假設需要使用的日誌名字為hostname.nnn
4、啟用新的更新日誌
shell>mysqladmin flush-logs
5、解除表的寫鎖
mysql>UNLOCK TABLES;
希望上面的例子能給你啟發,因為備份數據的手法多種多樣,你所使用的和上面所述可能大不一樣,但是對於備份和恢復中,表的鎖定、啟用新的更新日誌的時機應該是類似的,仔細考慮這個問題。
MySQL資料庫優化:
選擇InnoDB作為存儲引擎
大型產品的資料庫對於可靠性和並發性的要求較高,InnoDB作為默認的MySQL存儲引擎,相對於MyISAM來說是個更佳的選擇。
優化資料庫結構
組織資料庫的schema、表和欄位以降低I/O的開銷,將相關項保存在一起,並提前規劃,以便隨著數據量的增長,性能可以保持較高的水平。
設計數據表應盡量使其佔用的空間最小化,表的主鍵應盡可能短。·對於InnoDB表,主鍵所在的列在每個輔助索引條目中都是可復制的,因此如果有很多輔助索引,那麼一個短的主鍵可以節省大量空間。
僅創建你需要改進查詢性能的索引。索引有助於檢索,但是會增加插入和更新操作的執行時間。
InnoDB的ChangeBuffering特性
InnoDB提供了changebuffering的配置,可減少維護輔助索引所需的磁碟I/O。大規模的資料庫可能會遇到大量的表操作和大量的I/O,以保證輔助索引保持最新。當相關頁面不在緩沖池裡面時,InnoDB的changebuffer將會更改緩存到輔助索引條目,從而避免因不能立即從磁碟讀取頁面而導致耗時的I/O操作。當頁面被載入到緩沖池時,緩沖的更改將被合並,更新的頁面之後會刷新到磁碟。這樣做可提高性能,適用於MySQL5.5及更高版本。
InnoDB頁面壓縮
InnoDB支持對表進行頁面級的壓縮。當寫入數據頁的時候,會有特定的壓縮演算法對其進行壓縮。壓縮後的數據會寫入磁碟,其打孔機制會釋放頁面末尾的空塊。如果壓縮失敗,數據會按原樣寫入。表和索引都會被壓縮,因為索引通常是資料庫總大小中佔比很大的一部分,壓縮可以顯著節約內存,I/O或處理時間,這樣就達到了提高性能和伸縮性的目的。它還可以減少內存和磁碟之間傳輸的數據量。MySQL5.1及更高版本支持該功能。
注意,頁面壓縮並不能支持共享表空間中的表。共享表空間包括系統表空間、臨時表空間和常規表空間。
使用批量數據導入
在主鍵上使用已排序的數據源進行批量數據的導入可加快數據插入的過程。否則,可能需要在其他行之間插入行以維護排序,這會導致磁碟I/O變高,進而影響性能,增加頁的拆分。關閉自動提交的模式也是有好處的,因為它會為每個插入執行日誌刷新到磁碟。在批量插入期間臨時轉移唯一鍵和外鍵檢查也可顯著降低磁碟I/O。對於新建的表,最好的做法是在批量導入後創建外鍵/唯一鍵約束。
一旦你的數據達到穩定的大小,或者增長的表增加了幾十或幾百兆位元組,就應該考慮使用OPTIMIZETABLE語句重新組織表並壓縮浪費的空間。對重新組織後的表進行全表掃描所需要的I/O會更少。
優化InnoDB磁碟I/O
增加InnoDB緩沖池大小可以讓查詢從緩沖池訪問而不是通過磁碟I/O訪問。通過調整系統變數innodb_flush_method來調整清除緩沖的指標使其達到最佳水平。
MySQL的內存分配
在為MySQL分配足夠的內存之前,請考慮不同領域對MySQL的內存需求。要考慮的關鍵領域是:並發連接——對於大量並發連接,排序和臨時表將需要大量內存。在撰寫本文時,對於處理3000+並發連接的資料庫,16GB到32GB的RAM是足夠的。
內存碎片可以消耗大約10%或更多的內存。像innodb_buffer_pool_size、key_buffer_size、query_cache_size等緩存和緩沖區要消耗大約80%的已分配內存。
日常維護
定期檢查慢的查詢日誌並優化查詢機制以有效使用緩存來減少磁碟I/O。優化它們,以掃描最少的行數,而不是進行全表掃描。
其他可以幫助DBA檢查和分析性能的日誌包括:錯誤日誌、常規查詢日誌、二進制日誌、DDL日誌(元數據日誌)。
定期刷新緩存和緩沖區以降低碎片化。使用OPTIMIZETABLE語句重新組織表並壓縮任何可能被浪費的空間。
⑷ SQLyog和MySQL自帶工具哪個好用
SQLyog 是一個易於使用的、快速而簡潔的圖形化管理MYSQL資料庫的工具,它能夠在任何地點有效地管理你的資料庫,而且它本身是完全免費的!!
功能:
1、快速備份和恢復數據;
2、以GRID / TEXT 格式顯示結果;
3、支持客戶端挑選、過濾數據;
4、批量執行很大的SQL腳本文件;
5、快速執行多重查詢並能夠返回每頁超過1000條的記錄集,而這種操作是直接生成在內存中的;
6、程序本身非常短小精悍!壓縮後只有348 KB ;
7、完全使用MySQL C APIs程序介面;
8、以直觀的表格界面建立或編輯數據表;
9、以直觀的表格界面編輯數據;
10、進行索引管理;
11、創建或刪除資料庫;
12、操縱資料庫的各種許可權:庫、表、欄位;
13、編輯BLOB類型的欄位,支持Bitmap/GIF/JPEG格式;
14、輸出數據表結構/數據為SQL腳本;
15、支持輸入/輸出數據為CSV文件;
16、可以輸出資料庫清單為HTML文件;
17、為所有操作建立日誌;
18、個人收藏管理操作語句;
19、支持語法加亮顯示;
20、可以保存記錄集為CSV、HTML、XML 格式的文件;
21、99% 的操作都可以通過快捷鍵完成;
22、支持對數據表的各種高級屬性修改;
23、查看數據伺服器的各種狀態、參數等;
24、支持更改數據表類型為ISAM, MYISAM, MERGE, HEAP, InnoDB, BDB
25、刷新數據伺服器、日誌、許可權、表格等;
26、診斷數據表:檢查、壓縮、修補、分析;
⑸ MySQL客戶端軟體有哪些不錯的值得推薦和一用
MySQL作為一種非常流行的關系型資料庫,在信息系統開發中扮演著非常重要的角色,經常被用於後端數據存儲,而MySQL本身又不提供非常便捷的客戶端軟體,因此出現了許許多多的第三方管理軟體,下面我簡單介紹幾個,感興趣的朋友可以自己下載嘗試一下:
SQLyog這是一個非常輕巧靈活的MySQL客戶端軟體,界面整潔、干凈友好,大部分開發人員都應該聽說或使用過,可以直接查看資料庫目錄結構,建庫建表靈活,支持SQL腳本導入導出、數據備份恢復等常見功能,語法高亮、自動補全等也都非常不錯,對於日常MySQL管理來說,是一個非常不錯的工具:
Navicat
這也是一個非常不錯的MySQL客戶端管理軟體,界面簡潔、功能強大,基本使用方式和SQLyog差不多,可以直接手動建庫建表、設計視圖(包括欄位類型、主外鍵關系、觸發器等),支持資料庫建模、SQL腳本導入導出、數據恢復和備份等常見功能,對於MySQL管理來說,也是一個非常不錯的工具:
Workbench
這是MySQL官方自帶的一個客戶端軟體,可以直接到官網下載安裝,免費、跨平台,專門為MySQL量身定製,兼容性良好,支持資料庫建模(ER模型、前向和反向工程)、數據遷移(低版本到高版本)、恢復與備份等常見功能,對於MySQL日常管理來說,也是一個非常不錯的工具:
phpMyAdmin
這是一個專門為php開發人員設計的MySQL管理工具,基於Web瀏覽器運行,界面干凈、整潔友好,可以很方便的查閱管理日常資料庫,建庫建表也非常容易,如果你是一個專業的php開發人員,那麼phpMyAdmin就是一個非常不錯的管理工具,缺點就是在數據的備份和恢復上不是很方便:
DataGrip
這是一個比較全能的資料庫客戶端軟體,支持目前幾乎所有的主流資料庫,包括MySQL,Oracle,SQL Server等,界面友好、干凈整潔,日常查詢、建庫建表、建模設計、備份恢復、數據遷移等,這個軟體都能很好支持,語法高亮、自動補全等功能也都非常不錯,對於資料庫管理來說,也是一個非常不錯的工具:
當然,還有許多其他MySQL客戶端管理軟體,像HeidiSQL,DBeaver等也都非常不錯,這里就不一一介紹了,基本功能和前面的這5個軟體差不多,只要你熟悉一下使用方式,很快就能掌握的。至於哪個好,哪個更優秀,這個也沒有什麼明確標准,只要適合自己就行,如果你非常熟悉MySQL的話,也可以使用命令行工具,效果是一樣的,網上也有相關資料,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言進行補充。
MySQL的管理維護工具非常多,除了系統自帶的命令行管理工具之外,還有許多其他的圖形化管理工具,這里我介紹幾個經常使用的MySQL圖形化管理工具,供大家參考。
1、phpMyAdmin
phpMyAdmin是最常用的MySQL維護工具,是一個用PHP開發的基於Web方式架構在網站主機上的Mysql管理工具,支持中文,管理資料庫非常方便。不足之處在於對大資料庫的備份和恢復不方便。
2、MySQLDumper
MySQLDumper使用PHP開發的MySQL資料庫備份恢復程序,解決了使用PHP進行大資料庫備份和恢復的問題,數百兆的資料庫都可以方便的備份恢復,不用擔心網速太慢導致中間中斷的問題,非常方便易用。
這個軟體是德國人開發的,還沒有中文語言包。
3、Navicat
Navicat是一個桌面版MySQL資料庫管理和開發工具。和微軟SQLServer的管理器很像,易學易用。
Navicat使用圖形化的用戶界面,可以讓用戶使用和管理更為輕松。支持中文,有免費版本提供。
4、MySQL GUI Tools
MySQL GUI Tools是MySQL官方提供的圖形化管理工具,功能很強大,值得推薦,可惜的是沒有中文界面。
5、MySQL ODBC Connector
MySQL官方提供的ODBC介面程序,系統安裝了這個程序之後,就可以通過ODBC來訪問MySQL,這樣就可以實現SQLServer、Access和MySQL之間的數據轉換,還可以支持ASP訪問MySQL資料庫。
6、MySQL Workbench
MySQL Workbench是一個統一的可視化開發和管理平台,該平台提供了許多高級工具,可支持資料庫建模和設計、查詢開發和測試、伺服器配置和監視、用戶和安全管理、備份和恢復自動化、審計數據檢查以及向導驅動的資料庫遷移。
MySQL Workbench是MySQL AB發布的可視化的資料庫設計軟體,它的前身是 FabForce 公司的 DDesigner 4。
MySQL Workbench 為資料庫管理員、程序開發者和系統規劃師提供可視化設計、模型建立、以及資料庫管理功能。
它包含了用於創建復雜的數據建模ER模型,正向和逆向資料庫工程,也可以用於執行通常需要花費大量時間和需要的難以變更和管理的文檔任務。MySQL工作台可在Windows,Linux和Mac上使用。
7、SQLyog
SQLyog 是一個易於使用的、快速而簡潔的圖形化管理MYSQL資料庫的工具,它能夠在任何地點有效地管理你的資料庫。
SQLyog是業界著名的Webyog公司出品的一款簡潔高效、功能強大的圖形化MySQL資料庫管理工具。使用SQLyog可以快速直觀地讓您從世界的任何角落通過網路來維護遠端的MySQL資料庫。
⑹ 如何將兩個同樣的MYSQL資料庫表合並。表一表二的表結構是一樣只是內容一個表多了些並且有部分欄位修改過
實現欄位合並
首先建立關系(例如兩個表中的ID相同的1對1關系),然後建立一個生成表查詢,之後把所有欄位加入查詢中,執行該查詢,即可生成合並後的新表。
實現記錄合並
兩表結構要相同(至少有一個欄位相同,如果一個都不同有什麼意義呢),然後用追加查詢,選好追加到的表,和追加欄位,執行查詢即可cbcs147希望help you。reference51cto,365testing
⑺ 如何將兩個mysql伺服器里的innodb類型順利地合並在一起,除了導入導出還有其他方法嗎
ibdate1文件是沒法操作的,無論你用什麼工具去打開它,都看不到東西,或者看到一堆亂碼。合並文件什麼的,是沒法辦到的啦。mysql的安全機制還是做的很到位的。你是忘了資料庫的用戶名和密碼了?
⑻ 如何將mysql資料庫一個database中的所有表合並到一個新表中
以MySQL資料庫為例,通過SQL命令行將某個表的所有數據或指定欄位的數據,導入到目標表中。此方法對於SQLServer資料庫,也就是T-SQL來說,同樣適用 。
類別一、 如果兩張張表(導出表和目標表)的欄位一致,並且希望插入全部數據,可以用這種方法:(此方法只適合導出兩表在同一database)
INSERT INTO 目標表 SELECT * FROM 來源表;
例如,要將 articles 表插入到 newArticles 表中,則可以通過如下SQL語句實現:
INSERT INTO newArticles SELECT * FROM articles;
類別二、 如果只希望導入指定欄位,可以用這種方法:
INSERT INTO 目標表 (欄位1, 欄位2, ...) SELECT 欄位1, 欄位2, ... FROM 來源表;
請注意以上兩表的欄位必須一致(欄位類型),否則會出現數據轉換錯誤。
1、跨伺服器復製表中數據
insert into openrowset('sqloledb','localhost';'sa';'123',Test.dbo.Table_B)
select * from Test.dbo.Table_A
//啟用Ad Hoc Distributed Queries:
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
//使用完成後,關閉Ad Hoc Distributed Queries:
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure
2、//不跨伺服器
insert into dbo.Table_B) select * from dbo.Table_A
將表名和資料庫連接字元串用代碼拼接好 然後執行上述您需要的sql語句 程序功能即可完成
將一個mysql資料庫中的一個表導入到另一個mysql資料庫中
db1為原資料庫,db2為要導出到的資料庫,fromtable 是要導出的表名
1.方法一:
登錄導出到的資料庫,執行
create table fromtable select * from db1.fromtable;
2.方法二:
在cmd下執行,mysqlmp -u root -p db1 fromtable file=d:/fromtable.sql; 輸入秘密,root為用戶名
登錄db2 執行 source d:/fromtable.sql;
3.方法三:
登錄db1 執行 select * from fromtable into outfile "d:/fromtable .txt"; 導出純數據格式
登錄db2 執行 load data infile d:/fromtable .txt into table fromtable; 需要先建一張和原表結構一樣的空表。
4.建一個odbc連接,先導出到access中,再導出到另一個庫中。