schema在資料庫中表示的是資料庫對象集合,它包含了各種對像,比如:表,視圖,存儲過程,索引等等。
一般情況下一個用戶對應一個集合,為了區分不同的集合就需要給不同的集合起名字。用戶的schema名就相當於用戶名,並作為該用戶預設schema。
所以說,schema集合看上去像用戶名。例如,當訪問一個數據表時,如果該表沒有指明屬於哪個schema,系統就會自動的加上預設的schema。
(1)mysqlschema資料庫同步擴展閱讀
Schema的創建在不同的資料庫中要創建的Schema方法是不一樣的,但是它們有一個共同的特點就是都支持CREATE SCHEMA語句。
在MySQL資料庫中,可以通過CREATE SCHEMA語句來創建一個資料庫Oracle Database在Oracle中,由於資料庫用戶已經創建了一個模式,所以,CREATE SCHEMA語句創建的是一個schema,它允許將schema同表和視圖關聯起來,並在這些多個事務中發出多個SQL語句。
SQL Server在SQL Server中,CREATE SCHEMA會按照名稱來創建一個模式,與MySQL不同,CREATE SCHEMA語句創建了一個單獨定義到資料庫的模式。和Oracle資料庫也有不同,它實際上創建了一個模式,而且一旦創建了模式,就可以往模式中添加用戶和對象。
B. mysql主從資料庫不同步的2種解決方法
今天發現Mysql的主從資料庫沒有同步
先上Master庫:
mysql>show
processlist;
查看下進程是否Sleep太多。發現很正常。
show
master
status;
也正常。
mysql>
show
master
status;
+-------------------+----------+--------------+-------------------------------+
|
File
|
Position
|
Binlog_Do_DB
|
Binlog_Ignore_DB
|
+-------------------+----------+--------------+-------------------------------+
|
mysqld-bin.000001
|
3260
|
|
mysql,test,information_schema
|
+-------------------+----------+--------------+-------------------------------+
1
row
in
set
(0.00
sec)
再到Slave上查看
mysql>
show
slave
status\G
Slave_IO_Running:
Yes
Slave_SQL_Running:
No
可見是Slave不同步
下面介紹兩種解決方法:
方法一:忽略錯誤後,繼續同步
該方法適用於主從庫數據相差不大,或者要求數據可以不完全統一的情況,數據要求不嚴格的情況
解決:
stop
slave;
#表示跳過一步錯誤,後面的數字可變
set
global
sql_slave_skip_counter
=1;
start
slave;
之後再用mysql>
show
slave
status\G
查看:
Slave_IO_Running:
Yes
Slave_SQL_Running:
Yes
ok,現在主從同步狀態正常了。。。
方式二:重新做主從,完全同步
該方法適用於主從庫數據相差較大,或者要求數據完全統一的情況
解決步驟如下:
1.先進入主庫,進行鎖表,防止數據寫入
使用命令:
mysql>
flush
tables
with
read
lock;
注意:該處是鎖定為只讀狀態,語句不區分大小寫
2.進行數據備份
#把數據備份到mysql.bak.sql文件
[root@server01
mysql]#mysqlmp
-uroot
-p
-hlocalhost
>
mysql.bak.sql
這里注意一點:資料庫備份一定要定期進行,可以用shell腳本或者python腳本,都比較方便,確保數據萬無一失
3.查看master
狀態
mysql>
show
master
status;
+-------------------+----------+--------------+-------------------------------+
|
File
|
Position
|
Binlog_Do_DB
|
Binlog_Ignore_DB
|
+-------------------+----------+--------------+-------------------------------+
|
mysqld-bin.000001
|
3260
|
|
mysql,test,information_schema
|
+-------------------+----------+--------------+-------------------------------+
1
row
in
set
(0.00
sec)
4.把mysql備份文件傳到從庫機器,進行數據恢復
#使用scp命令
[root@server01
mysql]#
scp
mysql.bak.sql
[email protected]:/tmp/
5.停止從庫的狀態
mysql>
stop
slave;
6.然後到從庫執行mysql命令,導入數據備份
mysql>
source
/tmp/mysql.bak.sql
7.設置從庫同步,注意該處的同步點,就是主庫show
master
status信息里的|
File|
Position兩項
change
master
to
master_host
=
'192.168.128.100',
master_user
=
'rsync',
master_port=3306,
master_password='',
master_log_file
=
'mysqld-bin.000001',
master_log_pos=3260;
8.重新開啟從同步
mysql>
stop
slave;
9.查看同步狀態
mysql>
show
slave
status\G
查看:
Slave_IO_Running:
Yes
Slave_SQL_Running:
Yes
好了,同步完成啦。
C. 如何設置Mysql同步 分享修改刪除
流程:
1:在mysql下找到my.ini文件,在其[mysqld] 下添加主伺服器端配置:
server-id=1 #伺服器 idlog-bin=C:Program FilesMySQLMySQL Server 5.5mysql-bin #二進制文件存放路徑binlog-do-db=test1 #待同步的資料庫binlog-ignore-db=information_schema #忽略不同步的資料庫,這個可以不用寫binlog-ignore-db=mysql #忽略不同步的資料庫,這個可以不用寫binlog-ignore-db=test #忽略不同步的資料庫,這個可以不用寫
2:保存my.ini文件,重啟資料庫,然後會在C:Program FilesMySQLMySQL Server 5.5 下看到mysql-bin.index 文件和mysql-bin.000001文件;
3:通過cmd進入mysql:cd C:Program FilesMySQLMySQL Server 5.5in
輸入用戶名和密碼:mysql -u用戶名 -p密碼 ( mysql -uroot -proot )
4:給要連接的從伺服器設置許可權:grant replication slave,reload,super on *.* [email protected] identified by '123456'; ps: 給主機192.168.1.193添加許可權,用戶名:slave,密碼:123456;(只需輸入一次就可以了)
5:輸入命令 show master status; # 找到File 和 Position 的值記錄下來;
其實,主伺服器是不需要設置太多信息的,只需要第1條中的前三行就足夠了。
下面配置從伺服器:
1:在mysql下找到my.ini文件,在其[mysqld] 下添加從伺服器端配置:
server-id=2 #伺服器 id ,不能和主伺服器一致replicate-do-db=test1 #待同步的資料庫binlog-ignore-db=information_schema #忽略不同步的資料庫,這個可以不用寫binlog-ignore-db=mysql #忽略不同步的資料庫,這個可以不用寫binlog-ignore-db=mysql #忽略不同步的資料庫,這個可以不用寫binlog-ignore-db=test #忽略不同步的資料庫,這個可以不用寫
2:保存my.ini文件,重啟從資料庫,在mysql5.1以上版本中是不支持1中master設置的,如果添加了master設置,資料庫就無法重啟了;
3:通過cmd進入mysql:cd C:Program FilesMySQLMySQL Server 5.5in
4:從伺服器上測試:mysql -u slave -p 123456 -h 192.168.1.192,查看能否連接主資料庫成功,如果成功,則一定要退出來,之前我就是一直犯了一個錯誤,按照網上的步驟測試完畢之後就沒有退出mysql,結果執行以下步驟時老是報錯,其原因是一直設置的是主資料庫;
5:修改對主資料庫的連接的參數:mysql>change master to master_host='192.168.1.193',master_user='slave2',master_password='1234562', master_log_file='mysql-bin.000001',master_log_pos=107; ps:可能會報一個錯誤,大概的意思是說slave線程正在運行,不能設置,這樣的話,執行mysql>stop slave; 停止slave線程,然後再設置連接的參數;
6:設置完之後,執行 mysql> start slave; 開啟slave線程;執行mysql> show slave statusG (沒有分號),查看
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
其實原因很簡單,測試連接主資料庫之後沒有退出來,造成接下來的所有步驟都是對主資料庫的操作;
其實主主同步也是相同的配置,只是相互為主機和從機的設置;
D. 如何在兩台伺服器之間安全遷移MySQL資料庫
遷移MySQL資料庫通常只需要幾個簡單的步驟,但是由於您要轉移的數據量可能比較龐大,因此一般耗時也會比較長。
下面的步驟將指導您如何從舊的伺服器上導出MySQL資料庫,對它進行安全加固;然後將其復制並導入到新的伺服器上,以保證數據的完整。
將MySQL資料庫導出至轉儲文件(mp file)
Oracle提供了一個名為mysqlmp的工具,允許您輕松地將資料庫結構和其數據導出到一個SQL的轉儲文件。您可以使用如下的命令:
1.mysqlmp -u root -p --opt [database name] > [database name].sql
不過,請注意如下幾點:
我們可以使用--single-transaction的標志,以避免資料庫在導出數據的過程中被鎖死。這樣能夠在將數據導出到轉儲文件的同時,您仍可繼續在舊的資料庫上更新數據。不過請注意,那些在導出進程已經開始之後被更新的數據,是不會被導入轉儲文件之中的。
在運行該命令之前,請務必將[database name]替換成您的實際資料庫名稱。
請輸入您自己的用戶名和相對應的密碼,並確保該用戶具有備份資料庫所需的許可權。
安全加固備份文件
在大多數情況下,數據是一家企業的最重要的資產。因此,我們不希望資料庫的各種備份被暴露在不受保護的伺服器上,因為這樣有可能會造成錯誤地泄露,甚至會出現被黑客竊取等更為糟糕的狀況。
因此,通常您可以嘗試的做法是:壓縮、加密文件,然後刪除原文件。在Linux操作系統上,請使用以下的命令對已壓縮文件進行加密:
1.zip --encrypt mp.zip db.sql
在壓縮開始之前,系統將提示您輸入密碼。
傳輸備份文件
至此,我們已經獲得了一個加密的轉儲文件。下面讓我們通過網路使用SCP命令,將其傳輸到新的伺服器上:
1.scp /path/to/source-file user@host:/path/to/destination-folder/
將MySQL轉儲導入新伺服器
通過上面一步,我們已將備份文件傳到了新的伺服器上,下面讓我們來進行解密和提取:
1.unzip -P your-password mp.zip
為了存儲空間和安全方面的原因,一旦文件導入成功,請記得刪除其對應的轉儲文件。
您可以使用以下的命令來導入文件:
1.mysql -u root -p newdatabase < /path/to/newdatabase.sql
在新伺服器上驗證導入的數據
現在我們在新伺服器上已經導入了資料庫,那麼我們就需要一種方法來驗證數據的真實存在,並確保沒有任何遺漏。
我建議您同時在舊的和新的資料庫上運行如下查詢,並將獲得的結果進行對比。
該查詢會在所有的表裡計算行數,以顯示出新、舊資料庫中的數據量。
1.SELECT
2.TABLE_NAME,
3.TABLE_ROWS
4.FROM
`
5.information_schema`.`tables`
6.WHERE
`
7.table_schema` = 'YOUR_DB_NAME';
此外,我建議您檢查各個表中數字列的MIN和MAX記錄,以確保數據本身是有效的,而不僅僅是看數據的總量(雖然這是查詢所唯一能夠讀出的值)。另一種可供測試的選擇是將資料庫從新的伺服器導出為SQL轉儲文件,並將其與舊伺服器的SQL轉儲文件做比較。
此外,在應用程序被遷移之前,我建議您先將一個應用程序的實例重定向到新的資料庫上,以確認一切運行正常。
另一種導出和導入的選項
我們之所以把該選項放在最後,是因為我們的確不建議您去使用它。
該方法實現起來非常的容易,因為它僅使用一個命令,便能一次性將轉儲文件導出、傳輸、並將其數據導入到新的資料庫之中。
而它的不足之處在於,一旦其網路鏈接斷掉,您就需要重新啟動它了。
因此,我們認為它並不值得被推薦,尤其是在大型資料庫中,可能會非常不適用。
當然,如果您非要嘗試一下的話,可以使用如下的命令:
1.mysqlmp -u root -pPassword --all-databases | ssh user@new_host.host.com 'cat - | mysql -u root -pPassword'
重要提示
請確保在新舊兩處,安裝有相同官方發行版本的MySQL伺服器。否則,你需要按照MySQL網站上的升級說明來進行統一(請參見(https://dev.mysql.com/doc/refman/5.7/en/upgrading.html)。
請確保您在舊的伺服器上擁有足夠的空間來保存轉儲文件和壓縮文件(應該有db_size×2的空間)。
請確保您在新的伺服器上擁有足夠的空間來保存加密的和解密的轉儲文件、並能導入資料庫(應該有db_size×3的空間)。
如果您曾經考慮過只是將datadir從一個資料庫轉移到另一個的話,我建議您最好不要這樣做。否則,您會搞亂資料庫的內部結構,而且會給將來可能的問題埋下隱患。
在新的伺服器配置中,請不要忘了配置諸如innodb_log_file_size這樣的重要標志。因為如果忘記了根據新伺服器的規格而更新配置的話,很可能會導致嚴重的性能問題。
在許多情況下,一般升級到新的資料庫伺服器的初衷是為了提高查詢性能。而如果此類升級沒有達到預期的改善,那麼您就應該考慮去優化SQL查詢,而不僅僅是升級硬體那麼簡單了
E. 如何設置MySQL同步
流程:
1:在mysql下找到my.ini文件,在其[mysqld] 下添加主伺服器端配置:
server-id=1 #伺服器 id
log-bin=C:Program FilesMySQLMySQL Server 5.5mysql-bin #二進制文件存放路徑
binlog-do-db=test1 #待同步的資料庫
binlog-ignore-db=information_schema #忽略不同步的資料庫,這個可以不用寫
binlog-ignore-db=mysql #忽略不同步的資料庫,這個可以不用寫
binlog-ignore-db=test #忽略不同步的資料庫,這個可以不用寫
2:保存my.ini文件,重啟資料庫,然後會在C:Program FilesMySQLMySQL Server 5.5 下看到mysql-bin.index 文件和mysql-bin.000001文件;
3:通過cmd進入mysql:cd C:Program FilesMySQLMySQL Server 5.5in
輸入用戶名和密碼:mysql -u用戶名 -p密碼 ( mysql -uroot -proot )
4:給要連接的從伺服器設置許可權:grant replication slave,reload,super on *.* [email protected] identified by '123456'; ps: 給主機192.168.1.193添加許可權,用戶名:slave,密碼:123456;(只需輸入一次就可以了)
5:輸入命令 show master status; # 找到File 和 Position 的值記錄下來;
其實,主伺服器是不需要設置太多信息的,只需要第1條中的前三行就足夠了。
下面配置從伺服器:
1:在mysql下找到my.ini文件,在其[mysqld] 下添加從伺服器端配置:
server-id=2 #伺服器 id ,不能和主伺服器一致
replicate-do-db=test1 #待同步的資料庫
binlog-ignore-db=information_schema #忽略不同步的資料庫,這個可以不用寫
binlog-ignore-db=mysql #忽略不同步的資料庫,這個可以不用寫
binlog-ignore-db=mysql #忽略不同步的資料庫,這個可以不用寫
binlog-ignore-db=test #忽略不同步的資料庫,這個可以不用寫
2:保存my.ini文件,重啟從資料庫,在mysql5.1以上版本中是不支持1中master設置的,如果添加了master設置,資料庫就無法重啟了;
3:通過cmd進入mysql:cd C:Program FilesMySQLMySQL Server 5.5in
4:從伺服器上測試:mysql -u slave -p 123456 -h 192.168.1.192,查看能否連接主資料庫成功,如果成功,則一定要退出來,之前我就是一直犯了一個錯誤,按照網上的步驟測試完畢之後就沒有退出mysql,結果執行以下步驟時老是報錯,其原因是一直設置的是主資料庫;
5:修改對主資料庫的連接的參數:mysql>change master to master_host='192.168.1.193',master_user='slave2',master_password='1234562', master_log_file='mysql-bin.000001',master_log_pos=107; ps:可能會報一個錯誤,大概的意思是說slave線程正在運行,不能設置,這樣的話,執行mysql>stop slave; 停止slave線程,然後再設置連接的參數;
6:設置完之後,執行 mysql> start slave; 開啟slave線程;執行mysql> show slave statusG (沒有分號),查看
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
其實原因很簡單,測試連接主資料庫之後沒有退出來,造成接下來的所有步驟都是對主資料庫的操作;
其實主主同步也是相同的配置,只是相互為主機和從機的設置;
F. 如何實現同一台mysql伺服器中不同資料庫之間的數據同步
1.主上修改my.cnf文件:
server-id=1
log-bin=mysql-bin
2.從上修改配置文件 my.cnf
server-id=2
relay-log=relay-bin
read-only =1
replicate-ignore-db = mysql
replicate-ignore-db = test
replicate-ignore-db = information_schema
#replicate-wild-do-table = tt.admin
replicate-wild-do-table = my_db.stu // 所要同步的資料庫的單個表
3. 創建 同步的用戶(主上)
grant replication client,replication slave on *.* to rep@'10.41.50.105' identified by 'root';
4.同步到主庫(在從上操作)
change master to master_host='10.41.50.80',master_user='rep',master_password='root';
5.在從上驗證:
show slave status\G;
主從同步某些表