Software

MySQL 移除 binlog 方式

因為最近資料庫逐漸肥大,然後 RD 那邊反映它們已經將程式所產生的 LOG 從 DB 移除了,後來查的結果才發現是 MySQL binlog 的問題 在 my.cnf 裡面加入自動移除天數 expire_logs_days=3  #僅保留三天,預設值是0永久保留 進入 MySQL 手動移除 show binary logs; #顯示出目前 binlog 狀況 RESET MASTER; #刪除所有的 binlog 並從頭開始編號 PURGE MASTER LOGS TO ‘xxx-bin.010’; # 由 xxx-bin.010 開始開始刪除之前的 log PURGE MASTER LOGS BEFORE ‘2022-01-01 00:00:00’; #刪除相對日期之前的 log

Continue Reading
Software

Docker 的 Mysql 如何做 mysqldump

因為都是小專案所以在佈署上就都使用了 Docker 就連 DB 也是,但是另一個問題就是怎麼用 mysqldump 把 DB 備份出來,後來找到了一個方式 備份 DB : docker exec CONTAINER /usr/bin/mysqldump -u root –password=root DATABASE > backup.sql 復原 DB : cat backup.sql | docker exec -i CONTAINER /usr/bin/mysql -u root –password=root DATABASE ## 這邊要注意要多加一個 -i 才有辦法把 cat 出來的東西塞進 CONTAINER

Continue Reading
Software

mysqldump 需要的權限

在做 MySQL dump 備份的時候之前都會使用 ALL 去取得全部的資料庫 不過在安全性上就會有些疑慮了,所以最好的方式還是設定一個專用的帳號 需要的權限有這些: SELECT PROCESS LOCK TABLES SHOW VIEW TRIGGER 直接進入 CLI 後建立使用者跟權限的方式 CREATE USER 'dbbackup'@'%' IDENTIFIED BY '12345678'; GRANT SELECT, PROCESS, LOCK TABLES, SHOW VIEW, TRIGGER ON *.* TO 'dbbackup'@'%';

Continue Reading
Software

Got error 261 ‘DML count in transaction exceeds config parameter

匯入 NDB 的時候發生了一個錯誤 ERROR 1296 (HY000) at line 65: Got error 261 'DML count in transaction exceeds config parameter MaxDMLOperationsPerTransaction/MaxNoOfConcurrentOp' from NDBCLUSTER 看起來的問題應該是匯入的 INSERT INTO 量太大了,所以要將 MaxNoOfConcurrentOperations 這個參數條大 [ndbd default] # 在 config 裡面定義這兩個參數就可以了 MaxNoOfConcurrentOperations=1048576 MaxNoOfConcurrentTransactions=1048576

Continue Reading
Software

Cannot update GTID_PURGED with the Group Replication plugin running

今天將 GR 的資料做 mysqldump 的時候發生了這樣子的警告訊息,然後在匯入到新環境的時候就發生了錯誤 Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass –set-gtid-purged=OFF. To make a complete dump, pass –all-databases –triggers –routines –events. 主要是因為 MGR 狀態的時候會啟動 …

Continue Reading
Software

清理 mysql binlog

繼上一篇的 GCP 硬碟炸掉的文章裡面發現主要讓他滿出來的問題主是因為 MySQL Binlog 的問題,所以就算是把空間擴大了但是主要還是要移除過期的 Binlog 才可以 一般來說 BingLog 有兩個很大的用途 資料恢復 Binlog 記錄了所有的 SQL 動作,所以如果 binlog 完整了話就有可以恢復到某個指定的時間點。 主從複製 從屬 DB 會去訂閱 binlog 的動作然後進而產生資料庫同步的效果 但是有時候過多的 binlog 會造成硬碟的負擔,使用下面的語句可以指定保留幾天內的 binglog PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 3 DAY); 或是在 my.cnf 裡面加上 #只保留三天的 bin log expire_logs_days=3 基本上這種清 bin log 的機制不管是手動還是自動最好還是有一個機制會比較恰當 例如輸出備份後刪除,因為 bin log 用途很廣泛,所以盡可能的保留下來

Continue Reading
Software

MySQLRouter

1.架構確認 mysql router : 實踐單一路口多節點分流或讀寫分離 2.建立主機 192.168.1.60 myrouter innodb cluster 192.168.1.61 innodb-node1 192.168.1.62 innodb-node2 192.168.1.63 innodb-node3 3.環境準備 3.1 安裝 mysql router 匯入官方的 mysql apt repository https://dev.mysql.com/downloads/repo/apt/ wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb && \ sudo dpkg -i ./mysql-apt-config_0.8.22-1_all.deb && \ sudo apt update && \ sudo apt install -y mysql-router 3.2 建立 router sudo mysqlrouter –bootstrap root@innodb-node1:3306 -d myrouter …

Continue Reading
Software

mysql cluster MGR 建立

1.架構確認 innodb cluster 基本架構如下 innodb-node (Primary) : innodb 架構主節點,通常也會是 R/W 節點 innodb-node (Secondary) : innodb 的抄寫節點,通常可以做為 R/O 的節點 innodb-node (Secondary) : innodb 的抄寫節點,通常可以做為 R/O 的節點 2.建立主機 192.168.1.61 innodb-node1 192.168.1.62 innodb-node2 192.168.1.63 innodb-node3 3.環境準備 3.1. MySQL sudo apt install mysql-server 3.2. 設定 my.con sudo vi /etc/mysql/my.cnf my.cnf內容 [mysqld] #當前 Node 的 ID 不得重複 server-id=61 gtid_mode=on enforce_gtid_consistency=on …

Continue Reading
Software

mysql cluster NDB 建立

1.架構確認 mysql cluster 基本架構如下 MySQL data nodes (ndbd) : 為 SQL Node 資料交換角色,同時會進行相互同步抄寫 Cluster Manager (ndb_mgmd) : 負責整個Cluster 集群中各個節點的管理工作, MySQL server/client (mysqld) : 主要為接收/傳遞對外接口角色,由 AP Service 連結 2.建立主機 198.168.1.61 ndb_mgmd 198.168.1.62 ndbd01 198.168.1.63 ndbd02 198.168.1.64 mysqld01 如遇到需要下載部分請按照需求版本更動 這裡的 OS 跟 DB 的版本分別是 OS: ubuntu 20.04 mysql-cluster: 8.0.28 可由這邊查詢連結 https://dev.mysql.com/downloads/cluster/ 3.安裝 ndb_mgmd #下載 ndb_mgmd wget https://dev.mysql.com/get/Downloads/MySQL-Cluster-8.0/mysql-cluster-community-management-server_8.0.28-1ubuntu20.04_amd64.deb …

Continue Reading
Software

MySql 8.0 Loading local data is disabled

之前寫的一隻 python 腳本在 MySQL 升級 8.0 之後發現出現了一個錯誤 Loading local data is disabled; this must be enabled on both the client and server sides 後來查的結果是 8.0 預設將 local data 的權限關閉了,查了一些資料大部分都說要使用 SET GLOBAL local_infile=1; 將 local_infile 的 Value 改成 on,不˙過後來修改過後還是出現同樣的訊息 修改前 修改後 後來又看到了一篇說要將 my.cnf 上 本來以為這樣沒問題了…結果還是跳出一樣的訊息後來再查了一下發現除了 Server 以外 client 也要加如果使用 mysql cli 了話就是 mysql -h xxx.xxx.xxx.xxx –local-infile=1如果是 …

Continue Reading