- 在後端做主從備份;亦或是在大資料領域中,各類CDC同步(
Canal
/Flink CDC
等),均會基於MYSQL
的binlog
來實現。 - 因此,知道需要哪些許可權?怎麼查驗去、怎麼授權就很重要了。
感覺網上的文章沒成體系地清楚,而今天工作上處理問題的過程中遇到了此疑問,且曾多次對此產生疑問,自然便有了這一篇,作為個人的Momo備忘筆記~
- 不知道什麼是資料領域的
CDC
的朋友,可參見我剛參加工作,並進入大資料領域時的這篇科普文章~
1 MYSQL的binlog特性,需要使用者具備哪些許可權?
MySQL Binlog許可權需要3個許可權 :
SELECT
- 缺乏SELECT許可權時,報錯為
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user 'canal'@'%' to database 'binlog'
- 缺乏REPLICATION SLAVE許可權時,報錯為
- java.io.IOException: Error When doing Register slave:ErrorPacket [errorNumber=1045, fieldCount=-1, message=Access denied for user 'canal'@'%'
- 缺乏REPLICATION CLIENT許可權時,報錯為
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation
- 缺乏SELECT許可權時,報錯為
REPLICATION SLAVE
REPLICATION CLIENT
Binlog為什麼需要這些許可權?
Select
許可權代表允許從表中檢視資料Replication client
許可權代表允許執行show master status,show slave status,show binary logs
命令Replication slave
許可權代表允許slave主機透過此使用者連線master以便建立主從 複製關係
1 查驗:查驗指定使用者是否具有指定庫/指定表的binlog許可權
- Step1 Check binlog status of mysql database server
-- https://github.com/alibaba/canal/wiki/AdminGuide
show variables like 'log_bin';
show variables like 'binlog_format';
- Step2 查驗指定使用者是否具有指定庫/指定表的binlog許可權
SHOW GRANTS FOR '{userName}'@'%';
由圖可見,這顯然說明了該使用者對圖中這個庫有binlog許可權。
3 授予許可權
GRANT
SELECT
, REPLICATION SLAVE
, REPLICATION CLIENT
ON *.*
TO '{username}'@'%' IDENTIFIED BY '{password}'; -- % 可替換為 指定的 host
X 參考與推薦文獻
- [大資料]ETL之增量資料抽取(CDC) - 部落格園/千千寰宇
- [資料庫]MySQL之資料庫管理篇 - 部落格園/千千寰宇 【推薦】
- [資料庫]MySQL之SQL查詢 - 部落格園/千千寰宇
- MySQL Binlog 許可權 - 部落格園
Y 文末
- 感覺有幫助的、有需要的夥伴,可點贊、收藏、轉發~
- 歡迎評論、溝通~