日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql语句:索引,游标,存储过程,视图,分区,分库分表,数据库集群,数据库负载均衡...

發布時間:2024/9/20 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql语句:索引,游标,存储过程,视图,分区,分库分表,数据库集群,数据库负载均衡... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

學會數據庫是很實用D~~記錄一些常用的sql語句...有入門有提高有見都沒見過的...好全...收藏下...
其實一般用的就是查詢,插入,刪除等語句而已....但學學存儲過程是好事...以后數據方面的東西就不用在程序里搞嘍..而且程序與數據庫只要一個來回通訊就可以搞定所有數據的操作....

一、基礎

1、說明:創建數據庫
Create DATABASE database-name
2、說明:刪除數據庫
drop database dbname
3、說明:備份sql server
--- 創建 備份數據的 device
USE master
EXEC sp_addumpdevice ‘disk‘, ‘testBack‘, ‘c:\mssql7backup\MyNwind_1.dat‘
--- 開始 備份
BACKUP DATABASE pubs TO testBack
4、說明:創建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據已有的表創建新表:
A:create table tab_new like tab_old (使用舊表創建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、說明:刪除新表
drop table tabname
6、說明:增加一個列
Alter table tabname add column col type
注:列增加后將不能刪除。DB2中列加上后數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:添加主鍵: Alter table tabname add primary key(col)
說明:刪除主鍵: Alter table tabname drop primary key(col)
8、說明:創建索引:create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
注:索引是不可更改的,想更改必須刪除重新建。
9、說明:創建視圖:create view viewname as select statement
刪除視圖:drop view viewname
10、說明:幾個簡單的基本的sql語句
選擇:select * from table1 where 范圍
插入:insert into table1(field1,field2) values(value1,value2)
刪除:delete from table1 where 范圍
更新:update table1 set field1=value1 where 范圍
查找:select * from table1 where field1 like ’%value1%’ ---like的語法很精妙,查資料!
排序:select * from table1 order by field1,field2 [desc]
總數:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、說明:幾個高級查詢運算詞
A: UNION 運算符
UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)并消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。
注:使用運算詞的幾個查詢結果行必須是一致的。
12、說明:使用外連接
A、left outer join:
左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full outer join:
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。

二、提升

1、說明:復制表(只復制結構,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;

3、說明:跨數據庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具體數據庫’ where 條件
例子:..from b in ‘"&Server.MapPath("."&"\data.mdb" &"‘ where..

4、說明:子查詢(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b 或者: select a,b,c from a where a IN (1,2,3)

5、說明:顯示文章、提交人和最后回復時間
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、說明:外連接查詢(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、說明:在線視圖查詢(表名1:a
select * from (Select a,b,c FROM a) T where t.a > 1;

8、說明:between的用法,between限制查詢數據范圍時包括了邊界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 數值1 and 數值2

9、說明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1

11、說明:四表聯查問題:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12、說明:日程安排提前五分鐘提醒
SQL: select * from 日程安排 where datediff(‘minute‘,f開始時間,getdate())>5

13、說明:一條sql 語句搞定數據庫分頁
select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主鍵字段 = a.主鍵字段 order by&nbsp;a.排序字段

14、說明:前10條記錄
select top 10 * form table1 where 范圍

15、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復行而派生出一個結果表
(select a from tableA except (select a from tableB) except (select a from tableC)

17、說明:隨機取出10條數據
select top 10 * from tablename order by newid()

18、說明:隨機選擇記錄
select newid()

19、說明:刪除重復記錄
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、說明:列出數據庫里所有的表名
select name from sysobjects where type=‘U‘

21、說明:列出表里的所有的
select name from syscolumns where id=object_id(‘TableName‘)

22、說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實現多重選擇,類似select 中的case。
select type,sum(case vender when ‘A‘ then pcs else 0 end),sum(case vender when ‘C‘ then pcs else 0 end),sum(case vender when ‘B‘ then pcs else 0 end) FROM tablename group by type
顯示結果:
type vender pcs
電腦 A 1
電腦 A 1
光盤 B 2
光盤 A 2
手機 B 3
手機 C 3

23、說明:初始化表table1

TRUNCATE TABLE table1

24、說明:選擇從10到15的記錄
select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc

三、技巧

1、1=1,1=2的使用,在SQL語句組合時用的較多

“where 1=1” 是表示選擇全部 “where 1=2”全部不選,
如:
if @strWhere !=‘
begin
set @strSQL = ‘select count(*) as Total from [‘ + @tblName + ‘] where ‘ + @strWhere
end
else
begin
set @strSQL = ‘select count(*) as Total from [‘ + @tblName + ‘]‘
end

我們可以直接寫成
set @strSQL =&nbsp;‘select count(*) as Total from [‘ + @tblName + ‘] where 1=1 安定 ‘+ @strWhere

2、收縮數據庫
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收縮數據和日志
DBCC SHRINKDB
DBCC SHRINKFILE

3、壓縮數據庫
dbcc shrinkdatabase(dbname)

4、轉移數據庫給新用戶以已存在用戶權限
exec sp_change_users_login ‘update_one‘,‘newname‘,‘oldname‘
go

5、檢查備份集
RESTORE VERIFYONLY from disk=‘E:\dvbbs.bak‘

6、修復數據庫
Alter DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB(‘dvbbs‘,repair_allow_data_loss) WITH TABLOCK
GO
Alter DATABASE [dvbbs] SET MULTI_USER
GO

7、日志清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT


USE tablename -- 要操作的數據庫名
Select @LogicalFileName = ‘tablename_log‘, -- 日志文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log.
@NewSize =&nbsp;1 -- 你想設定的日志文件的大小(M)

-- Setup / initialize
DECLARE @OriginalSize int
Select @OriginalSize = size
FROM sysfiles
Where name = @LogicalFileName
Select ‘Original Size of ‘ + db_name() + ‘ LOG is ‘ +
CONVERT(VARCHAR(30),@OriginalSize) + ‘ 8K pages or ‘ +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + ‘MB‘
FROM sysfiles
Where name = @LogicalFileName
Create TABLE DummyTrans
(DummyColumn char (8000) not null)


DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
Select @StartTime = GETDATE(),
@TruncLog = ‘BACKUP LOG ‘ + db_name() + ‘ WITH TRUNCATE_ONLY‘

DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (Select size FROM sysfiles Where name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
Select @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- update
Insert DummyTrans VALUES (‘Fill Log‘)
Delete DummyTrans
Select @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
Select ‘Final Size of ‘ + db_name() + ‘ LOG is ‘ +
CONVERT(VARCHAR(30),size) + ‘ 8K pages or ‘ +
CONVERT(VARCHAR(30),(size*8/1024)) + ‘MB‘
FROM sysfiles
Where name = @LogicalFileName
Drop TABLE DummyTrans
SET NOCOUNT OFF

8、說明:更改某個表
exec sp_changeobjectowner ‘tablename‘,‘dbo‘

9、存儲更改全部表

Create PROCEDURE dbo.User_ChangeObjectOwnerBatch
@OldOwner as NVARCHAR(128),
@NewOwner as NVARCHAR(128)
AS

DECLARE @Name as NVARCHAR(128)
DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)

DECLARE curObject CURSOR FOR
select ‘Name‘ = name,
‘Owner‘ = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
order by name

OPEN curObject
FETCH NEXT FROM curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
if @Owner=@OldOwner
begin
set @OwnerName = @OldOwner + ‘.‘ + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- select @name,@NewOwner,@OldOwner

FETCH NEXT FROM curObject INTO @Name, @Owner
END

close curObject
deallocate curObject
GO


10、SQL SERVER中直接循環寫入數據
declare @i int
set @i=1
while @i<30
begin
insert into test (userid) values(@i)
set @i=@i+1
end



此文章主要向大家講述的是對MySQL數據庫集群進行正確配置的實際操作步驟,以及對其概念的講述,如果你對其相關的實際操作有興趣了解的話,以下的文章將會給你提供相關的知識。

一、介紹

這篇文檔旨在介紹如何安裝配置基于2臺服務器的MySQL數據庫集群。并且實現任意一臺服務器出現問題或宕機時MySQL依然能夠繼續運行。

注意!

雖然這是基于2臺服務器的MySQL集群,但也必須有額外的第三臺服務器作為管理節點,但這臺服務器可以在集群啟動完成后關閉。同時需要注意的是 并不推薦在集群啟動完成后關閉作為管理節點的服務器。盡管理論上可以建立基于只有2臺服務器的MySQL集群,但是這樣的架構,一旦一臺服務器宕機之后集 群就無法繼續正常工作了,這樣也就失去了集群的意義了。出于這個原因,就需要有第三臺服務器作為管理節點運行。

另外,可能很多朋友都沒有3臺服務器的實際環境,可以考慮在VMWare或其他虛擬機中進行實驗。

下面假設這3臺服務的情況:

Server1: mysql1.vmtest.net 192.168.0.1 Server2: mysql2.vmtest.net 192.168.0.2 Server3: mysql3.vmtest.net 192.168.0.3

Servers1和Server2作為實際配MySQL數據庫集群的服務器。對于作為管理節點的Server3則要求較低,只需對Server3的系 統進行很小的調整并且無需安裝MySQL,Server3可以使用一臺配置較低的計算機并且可以在Server3同時運行其他服務。

二、在Server1和Server2上安裝MySQL

注意:必須是max版本的MySQL,Standard版本不支持集群部署!

以下步驟需要在Server1和Server2上各做一次

# mv mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz /usr/local/ # cd /usr/local/ # groupadd mysql # useradd -g mysql mysql # tar -zxvf mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz # rm -f mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz # mv mysql-max-4.1.9-pc-linux-gnu-i686 mysql # cd mysql # scripts/mysql_install_db --user=mysql # chown -R root . # chown -R mysql data # chgrp -R mysql . # cp support-files/mysql.server /etc/rc.d/init.d/mysqld # chmod +x /etc/rc.d/init.d/mysqld # chkconfig --add mysqld

此時不要啟動MySQL!

三、安裝并配置管理節點服務器(Server3)

作為管理節點服務器,Server3需要ndb_mgm和ndb_mgmd兩個文件:

從http://www.mysql.com上下載mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz

# mkdir /usr/src/mysql-mgm # cd /usr/src/mysql-mgm # tar -zxvf mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz # rm mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz # cd mysql-max-4.1.9-pc-linux-gnu-i686 # mv bin/ndb_mgm . # mv bin/ndb_mgmd . # chmod +x ndb_mg* # mv ndb_mg* /usr/bin/ # cd # rm -rf /usr/src/mysql-mgm

現在開始為這臺管理節點服務器建立配置文件:

# mkdir /var/lib/mysql-cluster # cd /var/lib/mysql-cluster # vi config.ini

在config.ini中添加如下內容:

[NDBD DEFAULT] NoOfReplicas=2 [MYSQLD DEFAULT] [NDB_MGMD DEFAULT] [TCP DEFAULT] # Managment Server [NDB_MGMD]

HostName=192.168.0.3 #管理節點服務器Server3的IP地址

# Storage Engines [NDBD] HostName=192.168.0.1 #MySQL數據庫集群Server1的IP地址 DataDir= /var/lib/mysql-cluster [NDBD] HostName=192.168.0.2 #MySQL集群Server2的IP地址 DataDir=/var/lib/mysql-cluster

以下2個[MYSQLD]可以填寫Server1和Server2的主機名。

但為了能夠更快的更換集群中的服務器,推薦留空,否則更換服務器后必須對這個配置進行更改。

[MYSQLD] [MYSQLD]

保存退出后,啟動管理節點服務器Server3:

# ndb_mgmd

啟動管理節點后應該注意,這只是管理節點服務,并不是管理終端。因而你看不到任何關于啟動后的輸出信息。 


四、配置集群服務器并啟動MySQL

在Server1和Server2中都需要進行如下改動:

# vi /etc/my.cnf [mysqld] ndbcluster ndb-connectstring=192.168.0.3 #Server3的IP地址 [mysql_cluster] ndb-connectstring=192.168.0.3 #Server3的IP地址

保存退出后,建立數據目錄并啟動MySQL:

# mkdir /var/lib/mysql-cluster # cd /var/lib/mysql-cluster # /usr/local/mysql/bin/ndbd --initial # /etc/rc.d/init.d/mysqld start

可以把/usr/local/mysql/bin/ndbd加到/etc/rc.local中實現開機啟動。

注意:只有在第一次啟動ndbd時或者對Server3的config.ini進行改動后才需要使用--initial參數!

五、檢查工作狀態

回到管理節點服務器Server3上,并啟動管理終端:

# /usr/bin/ndb_mgm

鍵入show命令查看當前工作狀態:(下面是一個狀態輸出示例)

[root@mysql3 root]# /usr/bin/ndb_mgm -- NDB Cluster -- Management Client -- ndb_mgm> show Connected to Management Server at: localhost:1186 Cluster Configuration [ndbd(NDB)] 2 node(s) id=2 @192.168.0.1 (Version: 4.1.9, Nodegroup: 0, Master) id=3 @192.168.0.2 (Version: 4.1.9, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.0.3 (Version: 4.1.9) [mysqld(API)] 2 node(s) id=4 (Version: 4.1.9) id=5 (Version: 4.1.9) ndb_mgm>

如果上面沒有問題,現在開始測試MySQL:
注意,這篇文檔對于MySQL并沒有設置root密碼,推薦你自己設置Server1和Server2的MySQL root密碼。

在Server1中:

# /usr/local/mysql/bin/mysql -u root -p > use test; > CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER; > INSERT INTO ctest () VALUES (1); > SELECT * FROM ctest;

應該可以看到1 row returned信息(返回數值1)。

如果上述正常,則換到Server2上重復上面的測試,觀察效果。如果成功,則在Server2中執行INSERT再換回到Server1觀察是否工作正常。
如果都沒有問題,那么恭喜成功!

六、破壞性測試

將Server1或Server2的網線拔掉,觀察另外一臺MySQL數據庫集群服務器工作是否正常(可以使用SELECT查詢測試)。測試完畢后,重新插入網線即可。

如果你接觸不到物理服務器,也就是說不能拔掉網線,那也可以這樣測試:
在Server1或Server2上:

# ps aux | grep ndbd

將會看到所有ndbd進程信息:

root 5578 0.0 0.3 6220 1964 ? S 03:14 0:00 ndbd root 5579 0.0 20.4 492072 102828 ? R 03:14 0:04 ndbd root 23532 0.0 0.1 3680 684 pts/1 S 07:59 0:00 grep ndbd

然后殺掉一個ndbd進程以達到破壞MySQL集群服務器的目的:

# kill -9 5578 5579

之后在另一臺集群服務器上使用SELECT查詢測試。并且在管理節點服務器的管理終端中執行show命令會看到被破壞的那臺服務器的狀態。
測試完成后,只需要重新啟動被破壞服務器的ndbd進程即可:

# ndbd

注意!前面說過了,此時是不用加--inital參數的!

至此,MySQL數據庫集群就配置完成了! 




如果你對MySql數據庫主從同步負載均衡實時的備份,的實際操作步驟感到很是很郁悶時。你就可以瀏覽下面的文章了,我在一個信譽度很好的網站找到一個關于MySql數據庫主從同步負載均衡實時的備份的實際操作。供大家分享。

最近將四臺MySQL數據庫服務器配置成主從模式以實現一定的負載均衡,好象還可以接受,至少現在沒有出什么大問題。

MySQL同步機制基于master把所有對數據庫的更新、刪除 等)都記錄在二進制日志里。因此,想要啟用同步機制,在master就必須啟用二進制日志。每個slave接受來自master上在二進制日志中記錄的更新操作,因此在slave上執行了這個操作的一個拷貝。應該非常重要地意識到,二進制日志只是從啟用二進制日志開始的時刻才記錄更新操作的。所有的slave必須在啟用二進制日志時把master上已經存在的數據拷貝過來。如果運行同步時slave上的數據和master上啟用二進制日志時的數據不一致的話,那么slave同步就會失敗。

把master上的數據拷貝過來的方法之一實在slave上執行 LOAD DATA FROM MASTER 語句。不過要注意,LOAD DATA FROM MASTER 是從MySQL 4.0.0之后才開始可以用的,而且只支持master上的 MyISAM 類型表。同樣地,這個操作需要一個全局的讀鎖,這樣的話傳送日志到slave的時候在master上就不會有更新操作了。

當實現了自由鎖表熱備份時(在MySQL 5.0中),全局讀鎖就沒必要了。由于有這些限制,因此我們建議只在master上相關數據比較小的時候才執行 LOAD DATA FROM MASTER 語句,或者在master上允許一個長時間的讀鎖。由于每個系統之間 LOAD DATA FROM MASTER 的速度各不一樣,一個比較好的衡量規則是每秒能拷貝1MB數據。這只是的粗略的估計,不過master和slave都是奔騰700MHz的機器且用100MBit/s網絡連接時就能達到這個速度了。

slave上已經完整拷貝master數據后,就可以連接到master上然后等待處理更新了。如果master當機或者slave連接斷開,slave會定期嘗試連接到master上直到能重連并且等待更新。重試的時間間隔由 –master-connect-retry 選項來控制,它的默認值是60秒。每個slave都記錄了它關閉時的日志位置。msater是不知道有多少個slave連接上來或者哪個slave從什么時候開始更新。

MySQL數據庫同步功能由3個線程(master上1個,slave上2個)來實現。執行 START SLAVE 語句后,slave就創建一個I/O線程。I/O線程連接到master上,并請求master發送二進制日志中的語句。master創建一個線程來把日志的內容發送到slave上。這個線程在master上執行 SHOW PROCESSLIST 語句后的結果中的 Binlog Dump 線程便是。

slave上的I/O線程讀取master的 Binlog Dump 線程發送的語句,并且把它們拷貝到其數據目錄下的中繼日志(relay logs)中。第三個是SQL線程,salve用它來讀取中繼日志,然后執行它們來更新數據。如上所述,每個mster/slave上都有3個線程。每個master上有多個線程,它為每個slave連接都創建一個線程,每個slave只有I/O和SQL線程。

在MySQL 4.0.2以前,同步只需2個線程(master和slave各一個)。slave上的I/O和SQL線程合并成一個了,它不使用中繼日志。slave上使用2個線程的優點是,把讀日志和執行分開成2個獨立的任務。執行任務如果慢的話,讀日志任務不會跟著慢下來。

例如,如果slave停止了一段時間,那么I/O線程可以在slave啟動后很快地從master上讀取全部日志,盡管SQL線程可能落后I/O線程好幾的小時。如果slave在SQL線程沒全部執行完就停止了,但I/O線程卻已經把所有的更新日志都讀取并且保存在本地的中繼日志中了,因此在slave再次啟動后就會繼續執行它們了。這就允許在master上清除二進制日志,因為slave已經無需去master讀取更新日志了。執行 SHOW PROCESSLIST 語句就會告訴我們所關心的master和slave上發生的情況。 下面我們來具體配置

1. 在主服務器上為從服務器建立一個用戶:

grant replication slave on *.* to ‘用戶名‘@’主機’ identified by ‘密碼’; (在MySQL 數據庫4 dot 0.2以前,用 FILE 權限來代替 REPLICATION SLAVE)

如果打算在slave上執行 LOAD TABLE FROM MASTER 或 LOAD DATA FROM MASTER 語句,那么必須給該帳戶授予附加權限:
授予全局 SUPER 和 RELOAD 權限。

授予對想要加載的所有表上的 SELECT 權限。在master上任何沒有 SELECT 權限的表都會被 LOAD DATA FROM MASTER 略過。

2. 編輯主服務器的配置文件:/etc/my.cnf

server-id = 1

log-bin

binlog-do-db=需要備份的數據庫名,如果備份多個數據庫,重復設置這個選項即可

binlog-ignore-db=不需要備份的數據庫苦命,如果備份多個數據庫,重復設置這個選項即可

3. 編輯從服務器的配置文件:/etc/my.cnf

server-id=2 (配置多個從服務器時依次設置id號)

master-host=主機

master-user=用戶名

master-password=密碼

master-port=端口

replicate-do-db=需要備份的數據庫名,如果備份多個數據庫,重復設置這個選項即可

記得先手動同步一下主從服務器中要備份的數據庫,然后重啟主,從服務器。

要驗證主從設置是否已經成功,可以登錄從服務器輸入如下命令:

mysql> show slave status\G

得到的列表會有類似下面的數據:

Slave_IO_State: Waiting for master to send event Slave_IO_Running: Yes Slave_SQL_Running: Yes

如果后面兩個選項不全是Yes,那就說明你前面某個步驟配置錯了。

如果你的設置是正確的,嘗試在主服務器上插入若干條記錄,然后你再轉到從服務器,會發現相應的新記錄已經自動同步過來了。

如果你的主從服務器已經配置好了,那么你在應用程序中,只要保證所有的insert/delete/update操作是在主服務器上進行的,那么相應的數據變化會自動同步到從服務器上,這樣,我們就可以把select操作分擔到多臺從數據庫上,從而降低服務器的載荷。

如果你想使用復制數據文件的方式來備份數據庫,只要在從服務器上的mysql數據庫命令行先鍵入slave stop;然后復制數據庫文件,復制好了,再在mysql命令行鍵入slave start;啟動從服務器,這樣就即備份了數據有保證了數據完整性,而且整個過程中主服務器的mysql無需停止。

提示:如果修改了主服務器的配置,記得刪除從服務器上的master.info文件。否則從服務器使用的還是老配置,可能會導致錯誤。

注意:關于要復制多個數據庫時,binlog-do-db和replicate-do-db選項的設置,如果要備份多個數據庫,只要重復設置相應選項就可以了。

比如:

binlog-do-db=a bbinlog-do-db=b replicate-do-db=a replicate-do-db=b

補充:

在從服務器上使用show slave status

Slave_IO_Running,為No,則說明IO_THREAD沒有啟動,請執行slave start [IO_THREAD]

Slave_SQL_Running為No則復制出錯,查看Last_error字段排除錯誤后執行slave start [SQL_THREAD]

轉載于:https://my.oschina.net/905430/blog/655248

總結

以上是生活随笔為你收集整理的mysql语句:索引,游标,存储过程,视图,分区,分库分表,数据库集群,数据库负载均衡...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。