MySQL分區與主從的學習筆記

來源:互聯網
上載者:User

1 分區相關

MySQL5.6中,分區技術只支援水平資料分割,而不支援垂直資料分割,分區支援大部分的儲存引擎,但是MERGE, CSV, FEDERATED儲存引擎不支援。

使用KEY或者LINEAR KEY進行分區是支援NDB(網路資料庫)的,但是其他分區方式不支援。
在MySQL中查看是否是支援分區技術,使用命令 SHOW PLUGINS 進行查看,如果存在名稱為 partition 的外掛程式,狀態為 ACTIVE 則說明分區技術可用。
MySQL5.6支援顯式的分區查詢,如 SELECT * FROM T PARTITION(p0, p1) WHERE c < 5,可以只從p0,p1分區進行查詢

支援的分區類型

RANGE 根據給定列的值的範圍進行分區。
LIST 與RANGE類似,不過它通過判斷給定列的值是否在獨立的值的集合中進行分區。
HASH 這種分區根據對列進行操作的自訂運算式的值進行分區。這個自訂的函數可以包含任何可用的MySQL運算式,但是需要產生一個非負的值,擴充類型有LINEAR HASH.
KEY 這種分區方式與HASH類似,區別是只需要提供一列或者多列的值,通過MySQL自己的雜湊函數進行計算,擴充類型有LINEAR KEY.
常用的分區方式可以通過日期, 時間 進行分區。當使用KEY或者LINEAR KEY 方式進行分區的時候,可以直接使用TIME, DATETIME, DATE作為分區列而不需要執行任何的修改(常用時間函數:TO_DAYS(), YEAR, TO_SECONDS, WEEKDAY(),MONTH等)。

2 主從相關

主庫和從庫都需要配置一個唯一的ID(server-id), 每一個從庫都必須配置主庫的host名, 記錄檔名和設定檔中的位置。

2.1 配置Master

修改 my.cnf 或者 my.ini 檔案,在[mysqld]部分,增加(去掉注釋)下列選項:
[mysqld]
log-bin=mysql-bin
server-id=1

修改後,重啟mysql服務
如果沒有設定server-id或者是設定其為預設值 0,master將會拒絕所有slave的串連請求。 使用InnoDB的事務在進行複製的時候,應該設定innodb_flush_log_at_trx_commit=1和sync_binlog=1以擷取最佳的穩定性。 確保 skip-networking選項是禁止的,否則如果網路被禁止了,從庫將無法與主庫進行交流。
主庫中需要為從庫建立串連使用者,主庫上的任何具有REPLICATION SLAVE許可權的使用者都可以作為從庫的串連使用者。
mysql> CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com';
如果在主庫上已經存在資料了,在與從庫進行同步之前,必須先停止主庫上的處理進程,然後擷取當前二進位記錄檔的座標並dump它的資料。
下面的步驟用於擷取主庫的二進位日誌的座標:
使用命令列控制台串連到主庫上,執行如下命令:

mysql> FLUSH TABLES WITH READ LOCK;
使用 UNLOCK TABLES 釋放鎖
 mysql > SHOW MASTER STATUS;
 +------------------+----------+--------------+------------------+
 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
 +------------------+----------+--------------+------------------+
 | mysql-bin.000003 | 73       | test         | manual,mysql     |
 +------------------+----------+--------------+------------------+
 
如果在啟用log-bin之前,主庫已經運行一段時間了,則使用SHOW MASTER STATUS命令查看到的記錄檔名和位置將會是空的,在這種情況下,在從庫中指定記錄檔和位置分別為''和4.
如果在進行從庫同步複製之前,主庫中已經存在資料了,請保持讀鎖,使用下面的方法將主庫的資料複製到從庫中。
使用mysqldump建立要複製的所有資料庫的一個快照,然後匯入到從庫中。
# mysqldump -uroot --lock-all-tables --events --all-databases --master-data > dbdump.db
匯入dbdump.db檔案,使用命令shell> mysql < dbdump.db

2.2 配置slave

修改設定檔
[mysqld]
server-id=2
在從庫中,為了進行複製過程,並不需要啟用log-bin。但如果在從庫中啟用log-bin的話,你可以在從庫上進行二進位記錄備份和崩潰後的恢複,或者將從庫作為一個複雜的複寫拓撲網路的一部分(例如,從庫作為一個其它從庫的主庫)。
建立從庫到主庫的串連:
mysql> CHANGE MASTER TO
    ->     MASTER_HOST='master_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='recorded_log_file_name',
    ->     MASTER_LOG_POS=recorded_log_position;
例如:
mysql> change master to master_host='10.58.91.4', master_user='repl', master_password='888888',master_log_file='mysql-bin.000002', master_log_pos=385;
注意: 複製不能使用UNIX socket檔案,只能使用TCP/IP串連主庫。
啟動從庫
mysql> start slave;
如果出現無法串連的問題,請檢查是否伺服器iptables對連接埠有限制

3 常用命令

授權任意主機以root方式訪問
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION
查看server-id
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 0     |
+---------------+-------+
1 row in set (0.01 sec)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.