快速搭建主從的指令碼和問題排查
今天寫了一個快速搭建MySQL主從環境的指令碼,思路和前幾天釋出的MGR快速搭建的有一點像,但是最根本的差別就是這個指令碼支援5.6,5.7版本。其實sandbox本身也能夠做這些事情,自己寫這個只是想把這個過程自己記錄下來,明白可能在哪些地方有一些注意的細節。
本來以為寫起來會很容易,結果在最後除錯的時候發現MySQL 5.7版本沒問題了,MySQL 5.6版本碰到了問題。提示的資訊顯示從庫連線主庫抓取binlog的時候連線有問題,換句話說,就是資料庫連線失敗,導致從庫無法應用binlog.
這就奇怪了,MySQL 5.7可以,到了MySQL 5.6怎麼就不行了呢?
我看了下,涉及到複製使用者的語句就兩行:
CREATE USER rpl_usersss@'%';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';
仔細看也沒什麼特別之處啊。
難道是其他的地方的配置有問題?我們簡單來對比一下。
MySQL 5.7中,使用如下的方式連線是沒有問題的
# /usr/local/mysql_5.7/bin/mysql -urpl_user -prpl_pass -h 127.0.0.1 -P33081 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 5.7.19-log MySQL Community Server (GPL) 。。。 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL 5.6中,使用者名稱密碼不變的情況下,為什麼使用127.0.0.1就不行了呢。
# /usr/local/mysql_5.6/bin/mysql -urpl_user -prpl_pass -h 127.0.0.1 -P33091 Warning: Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user 'rpl_user'@'localhost' (using password: YES)
我前前後後花了不少的時間去對比,發現始終是提示使用者名稱密碼錯誤,但是我確認使用者名稱密碼是相同的。 帶著疑問我檢視了mysql.user表,看看裡面的一些基本資訊。 mysql> select user,host from mysql.user; +----------+------------------+ | user | host | +----------+------------------+ | rpl_user | % | | root | 127.0.0.1 | | root | ::1 | | | localhost | | root | localhost | | | oel64.oracle.com | | root | oel64.oracle.com | +----------+------------------+ 7 rows in set (0.00 sec) 這樣一個配置,使用者rpl_user是使用域名解析的方式,%的範圍很廣,所以倒不存在特殊的對映關係。 帶著疑問,從安全的角度來看,MySQL 5.6中有一些匿名使用者,還有預設的test庫,這些是應該改進的。 而確實在MySQL 5.7中已經做了相應的修復,或者說是改進吧。 5.7 預設就刪除了匿名使用者,mysql.user預設的情況如下。 mysql> select user,host from mysql.user; +---------------+-----------+ | user | host | +---------------+-----------+ | rpl_user | % | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+-----------+ 4 rows in set (0.04 sec) 所以我在MySQL 5.6中刪除了匿名使用者。 mysql> delete from mysql.user where user=''; Query OK, 2 rows affected (0.03 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 沒想到這個操作完成後,原本提示密碼錯誤的連線問題就引刃而解了。 我修改了指令碼,反反覆覆模擬了多次,能夠復現這類問題,也就暫時宣告了這個問題的一個基本解決。 如果回過頭來看這個問題,可能會有更多的收穫,比如從安全性方面的這些考慮,可能有些問題暫時不會 成為問題,但是會是潛在問題,有些問題雖然暫時不會有明顯的影響,但是在一些特定的場景下, 可能表現形式會更加複雜,而解法其實就很簡單了。 新寫的指令碼放在了github上,地址是: 因為剛寫好,所以很多註釋,細節還沒有改進,稍後繼續補充吧。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2144422/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 主題 2 Shell工具和指令碼指令碼
- iOS——寫一個快速定位問題的指令碼iOS指令碼
- Mysql主從架構搭建的時候遇到的問題MySql架構
- Docker 快速搭建主從 + 哨兵監控Docker
- MYSQL5.6.40原始碼安裝 主從搭建 主主搭建MySql原始碼
- 排查問題的思路和清單
- 通過shell指令碼快速定位active session問題指令碼Session
- mysql主從複製的理解和搭建MySql
- 關於SQLRecoverableException問題的排查和分析SQLException
- linux亂碼和資料庫亂碼的問題簡單排查Linux資料庫
- Sqlserver 2014 主從兩節點用指令碼完成alwayson搭建SQLServer指令碼
- 如何快速排查Linux伺服器效能問題Linux伺服器
- 使用shell指令碼快速得到主備關係指令碼
- Mysqldump匯出亂碼問題排查MySql
- MySQL5.6升級5.7時,出現主從延遲問題排查過程MySql
- MySQL之 從複製延遲問題排查MySql
- python監控mysql主從指令碼PythonMySql指令碼
- mysql主從同步問題整理MySql主從同步
- mysql5.6搭建主從過程中遇到主從server_uuid一致無法同步的問題MySqlServerUI
- Redis主從搭建Redis
- mysql主從搭建MySql
- java問題排查Java
- JVM 問題排查JVM
- 框架問題排查框架
- shell 指令碼的除錯問題指令碼除錯
- Shell指令碼監控MySQL主從狀態指令碼MySql
- 5.6 MySql主從自動切換指令碼MySql指令碼
- Java 線上問題排查神器 Arthas 快速上手與原理淺談Java
- Java線上問題排查神器Arthas快速上手與原理淺談Java
- mysql主從同步(2)-問題梳理MySql主從同步
- 從一次問題排查聊聊問什麼要懂原理
- REDIS主從頻繁切換事件排查Redis事件
- MYSQL主從複製的搭建MySql
- 兩個流程鏈路問題的排查和總結
- MySQL主從配置及haproxy和keepalived搭建MySql
- centos 搭建redis主從CentOSRedis
- MYSQL主從搭建5.6.38MySql
- mysqlxtrabackup線上搭建主從MySql