溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中如何分區(qū)已經存在大量數據的表

發(fā)布時間:2020-06-04 16:47:04 來源:網絡 閱讀:446 作者:三月 欄目:MySQL數據庫

下文給大家?guī)碛嘘PMySQL中如何分區(qū)已經存在大量數據的表內容,相信大家一定看過類似的文章。我們給大家?guī)淼挠泻尾煌兀恳黄饋砜纯凑牟糠职?,相信看完MySQL中如何分區(qū)已經存在大量數據的表你一定會有所收獲。

 環(huán)境:

  數據庫版本:5.6

  系統(tǒng)環(huán)境:CentOS 6.8


復制架構:

MySQL中如何分區(qū)已經存在大量數據的表


需求:

  需要將實例C上面一個2500萬行數據的Innodb引擎的表table進行分區(qū),但是在實例A上面表table不做任何的修改。

思考的問題:

  在實例C上面的表table做分區(qū),分區(qū)之后會不會影響實例A和實例C之間表table的傳輸,會不會造成數據不一致或者插入失敗,或者分區(qū)之后插入的數據會比較慢。

實際操作:都是在實例C上面的操作

  1. stop slave IO_THREAD 停掉IO_THREAD并且等待實例C重放relay log完畢。

    Master_Log_File == Relay_Master_Log_File and  Read_Master_Log_Pos == Exec_Master_Log_Pos 當這倆個表達式成立的時候表明本地的relay log已經重做完畢。

  2.邏輯備份表table的數據:

 mysqldump -S /var/lib/mysql/mysql.sock -uroot -p --single-transaction --master-data=2 -t --skip-add-drop-table sbtest sbtest1 > sbtest1.sql
 參數解釋:
 -t:不創(chuàng)建table
 --skip-add-drop-table:不做drop table操作

    在備份的時候不需要drop table 和 create table操作寫入備份的SQL語句中

  3.更改表名

    更改舊表的表名 rename table sbtest1 to sbtest2; 這樣做的目的是為了在做備份導入的時候不需要更改備份SQL語句,并且萬一分區(qū)失敗或者其他的原因至少也有表的備份存在。

  4.創(chuàng)建空表并且進行分區(qū):

CREATE TABLE `sbtest1` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `k` bigint(20) NOT NULL,
  `c` varchar(20) NOT NULL,
  `pad` varchar(50) COLLATE utf8mb4_bin NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY KEY (id) PARTITIONS 64

  新表的表結構要和舊表的表結構一致,唯一不同就是提前分好區(qū)。

  5.導入邏輯備份語句

mysql -uroot -p sbtest < sbtest1.sql

  6.導入完畢之后開啟slave并且觀察一段時間

start slave IO_THREAD

  7.pt-table-checksum數據一致性檢測(可做可不做)

    http://seanlook.com/2015/12/29/mysql_replica_pt-table-checksum/

  8.建議:

    因為2500萬行的數據的備份會花費比較長的時間,所以在備份的時候建議使用screen,那怕在你遠程回話斷開之后進程還是存在的。

對于上文關于MySQL中如何分區(qū)已經存在大量數據的表,大家覺得是自己想要的嗎?如果想要了解更多相關,可以繼續(xù)關注我們的行業(yè)資訊板塊。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI