在cmd命令提示符下輸入
靜寧網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),靜寧網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為靜寧上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的靜寧做網(wǎng)站的公司定做!
mysql -u root -p回車(chē),然后輸入密碼回車(chē)
進(jìn)入mysql命令行模式
create database databasename;//創(chuàng)建數(shù)據(jù)庫(kù)
use databasename;//使用數(shù)據(jù)庫(kù)
create table tablename(
id int not null primary key
);
這樣就創(chuàng)建了一個(gè)只有id字段的tablename表
數(shù)據(jù)庫(kù)快照是數(shù)據(jù)庫(kù)(稱(chēng)為“源數(shù)據(jù)庫(kù)”)的只讀靜態(tài)視圖。在創(chuàng)建時(shí),每個(gè)數(shù)據(jù)庫(kù)快照在事務(wù)上都與源數(shù)據(jù)庫(kù)一致。在創(chuàng)建數(shù)據(jù)庫(kù)快照時(shí),源數(shù)據(jù)庫(kù)通常會(huì)有打開(kāi)的事務(wù)。在快照可以使用之前,打開(kāi)的事務(wù)會(huì)回滾以使數(shù)據(jù)庫(kù)快照在事務(wù)上取得一致。
客戶端可以查詢數(shù)據(jù)庫(kù)快照,這對(duì)于基于創(chuàng)建快照時(shí)的數(shù)據(jù)編寫(xiě)報(bào)表是很有用的。而且,如果以后源數(shù)據(jù)庫(kù)損壞了,便可以將源數(shù)據(jù)庫(kù)恢復(fù)到它在創(chuàng)建快照時(shí)的狀態(tài)。
簡(jiǎn)單的說(shuō)就像拍個(gè)照片 如果樓主用過(guò)虛擬機(jī)就應(yīng)該非常清楚快照了
新建一個(gè)lvm磁盤(pán),這里我建的lv為mydatalv,掛載到了/data下
[root@localhost
~]#
lvs
LV
VG
Attr
LSize
Pool
Origin
Data%
Meta%
Move
Log
Cpy%Sync
Convert
mydatalv
mydata
-wi-ao----
1.00g
[root@localhost
~]#
df
-h
文件系統(tǒng)
容量
已用
可用
已用%
掛載點(diǎn)
/dev/mapper/mydata-mydatalv
976M
2.6M
907M
1%
/data
將原數(shù)據(jù)庫(kù)文件復(fù)制到/data目錄下
[root@localhost
~]#
cp
-a
/var/lib/mysql
/data/
修改配置文件,將mysql數(shù)據(jù)庫(kù)文件放在lvm盤(pán)中,二進(jìn)制文件放在非lvm盤(pán)的/var/lib/mysql/目錄下
[root@ns1
~]#
vim
/etc/my.cnf
[mysqld]
log_bin=/var/lib/mysql/mysql-bin
datadir=/data/mysql
[root@localhost
~]#
service
mariadb
restart
[root@localhost
~]#
ls
/data/mysql
aria_log.00000001
ibdata1
ib_logfile1
mysql-bin.000001
mysql-bin.000003
performance_schema
aria_log_control
ib_logfile0
mysql
mysql-bin.000002
mysql-bin.index
test
可以看到重啟后數(shù)據(jù)庫(kù)文件已存放在了/data/mysql目錄中了
對(duì)mysql進(jìn)行鎖表備份
[root@localhost
~]#
mysql
-e
'flush
tables
with
read
lock;'
鎖表
[root@localhost
~]#
mysql
-e
'flush
logs;'
對(duì)日志進(jìn)行滾動(dòng),
[root@localhost
~]#
mysql
-e
'show
master
status;'
/root/back.$(date
+%F+%T)
[root@localhost
~]#
ls
back.2016-07-13+10:14:29
對(duì)lv創(chuàng)建快照
[root@localhost
~]#
lvcreate
-L
1G
-n
mysqlback
-p
r
-s
/dev/mydata/mydatalv
釋放鎖
[root@localhost
~]#
mysql
-e
'unlock
tables;'
在別的磁盤(pán)上創(chuàng)建備份目錄,只讀掛載快照后備份至備份目錄
[root@localhost
~]#
mkdir
/myback
[root@localhost
~]#
mount
-r
/dev/mydata/mysqlback
/mnt
[root@localhost
~]#
cp
-a
/mnt/mysql
/myback
修改表內(nèi)容,然后刪除掉數(shù)據(jù)庫(kù)文件內(nèi)容即/data/mysql中的內(nèi)容
[root@localhost
~]#
mysql
MariaDB
[hellodb]
use
hellodb;
MariaDB
[hellodb]
insert
into
classes
(class,numofstu)
values
('xxoo',39);
[root@localhost
~]#
rm
-rf
/data/*
修改配置文件中二進(jìn)制日志和數(shù)據(jù)庫(kù)文件的位置
[root@localhost
~]#
vim
/etc/my.cnf
[mysqld]
log_bin=/data/mysql/mysql-bin
datadir=/data/mysql
利用/myback/中的內(nèi)容還原
[root@localhost
~]#
cp
-a
/myback/*
/data/
[root@localhost
~]#
service
mariadb
restart
利用二進(jìn)制日志還原快照后的操作,由下面這個(gè)文件來(lái)查看快照?qǐng)?zhí)行時(shí)二進(jìn)制日志的位置
[root@localhost
~]#
cat
back.2016-07-13+10\:14\:29
File
Position
Binlog_Do_DB
Binlog_Ignore_DB
mysql-bin.000014
245
將000014中245之后的操作做成sql文件,進(jìn)行還原
[root@localhost
~]#
mysqlbinlog
--start-position=245
/var/lib/mysql/mysql-bin.000014
binlog.sql
[root@localhost
~]#
mysql
/root/binlog.sql
查看恢復(fù)情況
[root@localhost
~]#
mysql
MariaDB
[(none)]
use
hellodb;
MariaDB
[hellodb]
select
*
from
classes;
+---------+----------------+----------+
|
ClassID
|
Class
|
NumOfStu
|
+---------+----------------+----------+
|
1
|
Shaolin
Pai
|
10
|
|
2
|
Emei
Pai
|
7
|
|
3
|
QingCheng
Pai
|
11
|
|
4
|
Wudang
Pai
|
12
|
|
5
|
Riyue
Shenjiao
|
31
|
|
6
|
Lianshan
Pai
|
27
|
|
7
|
Ming
Jiao
|
27
|
|
8
|
Xiaoyao
Pai
|
15
|
|
9
|
xxoo
|
39
|
+---------+----------------+----------+
9
rows
in
set
(0.00
sec)
用數(shù)據(jù)庫(kù)快照就能實(shí)現(xiàn)啊.
Oracle快照原理及實(shí)現(xiàn)總結(jié)
Oracle數(shù)據(jù)庫(kù)的快照是一個(gè)表,它包含有對(duì)一個(gè)本地或遠(yuǎn)程數(shù)據(jù)庫(kù)上一個(gè)或多個(gè)表或視圖的查詢的結(jié)果。對(duì)于中大型數(shù)據(jù)庫(kù),業(yè)務(wù)數(shù)據(jù)庫(kù)里所有的數(shù)據(jù)同步到另外一個(gè)處理服務(wù)器上最佳的選擇還是使用SnapShot方式,即快照的方式。
由于工作需要,今天需要將業(yè)務(wù)數(shù)據(jù)庫(kù)里所有的數(shù)據(jù)同步到另外一個(gè)處理服務(wù)器上。在做方案的時(shí)候,想了很多方法,當(dāng)然最快的辦法還是使用物理熱備的方式。
但是我個(gè)人認(rèn)為如果對(duì)于中大型數(shù)據(jù)庫(kù)(我們的數(shù)據(jù)庫(kù)有300G左右)最佳的選擇還是使用SnapShot方式,即快照的方式。
Oracle數(shù)據(jù)庫(kù)的快照是一個(gè)表,它包含有對(duì)一個(gè)本地或遠(yuǎn)程數(shù)據(jù)庫(kù)上一個(gè)或多個(gè)表或視圖的查詢的結(jié)果。也就是說(shuō)快照根本的原理就是將本地或遠(yuǎn)程數(shù)據(jù)庫(kù)上的一個(gè)查詢結(jié)果保存在一個(gè)表中。
以下是我建立的Snapshot,目的是從業(yè)務(wù)數(shù)據(jù)庫(kù)上將數(shù)據(jù)Copy到處理數(shù)據(jù)庫(kù)上,是不同的兩個(gè)服務(wù)器之間對(duì)數(shù)據(jù)copy。
第一步:在處理服務(wù)器上的Oracle終端,建立database link,業(yè)務(wù)數(shù)據(jù)庫(kù)服務(wù)器SID為T(mén)EST
create database link TEST_DBLINK.US.ORACLE.COM
connect to AMICOS identified by AMICOS
using 'test';
第二步:在業(yè)務(wù)數(shù)據(jù)庫(kù)上對(duì)應(yīng)的表建立快照日志
Create snapshot log on A_Table;
第三步:建立Snapshot 快照名稱(chēng)為:Test_SnapShot
Create snapshot Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/24
as select * from A_Table@TEST_DBLINK
說(shuō)明:REFRESH是刷新方法
刷新方式有:COMPLETE和FAST兩種,而START WITH是說(shuō)明開(kāi)始執(zhí)行的時(shí)間。
Next是下次執(zhí)行的時(shí)間
而AS以后是構(gòu)成快照的查詢方法。
相關(guān)的方法:
更改快照
ALTER SNAPSHOT Test_SnapShot
REFRESH COMPLETE START WITH SYSDATE NEXT SYSDATE+1/2;
手動(dòng)刷新快照 在命令界面執(zhí)行:
EXEC DBMS_SNAPSHOT.REFRESH('Test_SnapShot ','C');
第一個(gè)參數(shù)是要刷新的快照名
第二個(gè)參數(shù)是刷新的方式,F(xiàn)----FAST, C---COMPLETE
查看快照最后刷新的日期
SELECT NAME,LAST_REFRESH
FROM ALL_SNAPSHOT_REFRESH_TIMES;
最后非常的方案:
1:為需要做Snapshot的表建立Snapshot日志
create snapshot log on t1 with rowid; 這里使用ROWID建立日記的參數(shù)
2:采用Fast的方式建立快照,使用rowid做為參考參數(shù)
create snapshot fb_test_b refresh fast with rowid start with sysdate next sysdate+1/1440 as select * from fb_test_b@my_dblink;
最好能按照rowid來(lái)建立快照。要不然就必須要為表建立Primary Key。
首先我們做一個(gè)模擬,執(zhí)行以下的sql,其中有如下圖數(shù)據(jù):
我把執(zhí)行結(jié)果按照表格如下展示:
分析:
在會(huì)話1當(dāng)中,只有當(dāng)會(huì)話1的事務(wù)提交后,才能查到最終會(huì)話2更改的數(shù)據(jù)。
在會(huì)話2當(dāng)中,開(kāi)啟事務(wù)后更新數(shù)據(jù),之后查詢發(fā)現(xiàn)數(shù)據(jù)變成了17。
針對(duì)上面的現(xiàn)象我們進(jìn)行個(gè)原理分析:
實(shí)際上產(chǎn)生上述顯現(xiàn)是因?yàn)镮nnoDB采用的MVCC(多版本并發(fā)控制),其中針對(duì)每條數(shù)據(jù)會(huì)有它自己的事務(wù)id,以及一個(gè)最大事務(wù)id。針對(duì)事務(wù)中數(shù)據(jù)每次修改,會(huì)產(chǎn)生不同的版本。
1)假設(shè)開(kāi)始id = 2的數(shù)據(jù),其事務(wù)txid = 1000;
2)當(dāng)會(huì)話1開(kāi)始,此時(shí)txid變成了1001,而會(huì)話2開(kāi)啟,txid又變成了1002,同理會(huì)話3會(huì)變成1003,此時(shí)都生成了不同版本的快照。
3)會(huì)話1在事務(wù)當(dāng)中去讀取時(shí)候,采用了快照讀的方式,即拿到一個(gè)1001的事務(wù)id,此時(shí)只會(huì)讀取小于等于自己版本的數(shù)據(jù),所以在事務(wù)中最終只能拿到值為17的數(shù)據(jù)。
4)會(huì)話2在更新數(shù)據(jù)的時(shí)候,采用的當(dāng)前讀的方式,即對(duì)數(shù)據(jù)增加X(jué)鎖,獲取最新的事務(wù)id,讀取最新的版本數(shù)據(jù)。所以在更新之前,就讀取到了age的年齡是16,之后在進(jìn)行+1,得到17.
總結(jié)一下:
快照讀 解決了幻讀的問(wèn)題,即多次讀取數(shù)據(jù)不一致的問(wèn)題。
update、insert、delete都會(huì)執(zhí)行 當(dāng)前讀 ,防止并發(fā)更新數(shù)據(jù)導(dǎo)致數(shù)據(jù)錯(cuò)誤,此過(guò)程或添加X(jué)鎖。
快照讀 即: snapshot read ,官方叫法是: Consistent Nonlocking Reads ,即: 一致性非鎖定讀 ,官方的解釋是:
即:
即 快照讀 的問(wèn)題在于:在同一個(gè)事務(wù)中,能夠讀取到之前提交的數(shù)據(jù)。表現(xiàn)為:
字面意思:在事務(wù)中,為查詢創(chuàng)建的快照,并不適用與 DML 語(yǔ)句。
也就是說(shuō):如果事務(wù) A 開(kāi)始時(shí)創(chuàng)建的快照,查詢不到數(shù)據(jù) col1=1 ,但此時(shí)事務(wù) B 剛剛提交 insert col1=1 和 insert col1=1 ,此時(shí)如果事務(wù) A 執(zhí)行, delete col1=1 ,是能將事務(wù) B 生成的數(shù)據(jù)刪除的。
字面意思:即使事務(wù) A 的快照是在事務(wù) B 提交之前創(chuàng)建的,但事務(wù) A 也只有在事務(wù) A 和事務(wù) B 都提交后,才能看到事務(wù) B 新增的數(shù)據(jù)。