MySQL主从布署
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
MySQL主從布署
零、引入
作為一個架構(gòu)師,連MySQL主從布署、讀寫分離都不懂是說不過去的。
呃,在寫這篇文章之前,我的確是沒做過這方面的東西。一直都在做系統(tǒng)分析及實現(xiàn),所以有數(shù)據(jù)庫直連即可,一直以為到部署之后運營一段時間再作調(diào)整。
其實并不是這樣,往往底層的設(shè)計決定實現(xiàn)的方式。就這個MySQL主從吧,也有著讀寫分離的意味,寫一個數(shù)據(jù)庫,讀可以是多個數(shù)據(jù)庫。所以上層使用JPA、Hibernate這類的ORM框架就無法很好的工作——因為它個都認為讀寫是同一個數(shù)據(jù)庫。
所以,有時還是要從下往上看,這是架構(gòu)師的基本能力。
一、準備
1. 準備虛擬主機
安裝兩臺虛擬主機,IP信息如下:
192.168.122.20 mysql-primary # 主庫 192.168.122.21 mysql-secondary # 從庫2. 安裝MySQL
我是在Ubuntu 18.04 server上安裝MySQL的,奇怪的是從Ubuntu 18.04開始,MySQL的安裝有所不同,所以這里就說明一下:
# 安裝 $ sudo apt install mysql-server# 初始配置服務(wù)器 $ sudo mysql_secure_installation# 登錄服務(wù)器測試一下 - 注意,必須是sudo,否則就算輸入的密碼是正確的也連不上去。 $ sudo mysql -u root -p3. 配置/etc/hosts
這里配置這個主要是方便認知,如果用IP進行配置的話,一串串數(shù)字真的很容易出錯,于是就編輯/etc/hosts,以方便認知服務(wù)器:
192.168.122.20 mysql-primary 192.168.122.21 mysql-secondary二、配置主服務(wù)器
1. 先登上MySQL服務(wù)器
$ sudo mysql -u root -p2. 準備用戶
# 添加用戶同步的用戶,并賦予訪問所有功能的權(quán)限 mysql> CREATE USER repl; mysql> GRANT ALL ON *.* TO 'repl'@'%' IDENTIFIED BY 'repl_password';# 為root用戶添加遠程訪問數(shù)據(jù)庫的能力,方便測試數(shù)據(jù)(這一步并不是必須的) mysql> GRANT ALL ON *.* TO 'root'@'%';3. 配置服務(wù)器
編輯mysql配置文件,在Ubuntu中,文件路徑為:/etc/mysql/mysql.conf.d/mysqld.cnf:
# 在[mysqld]下面增加下面代碼# 數(shù)據(jù)主唯一標識,一般為本機IP最后一個數(shù)字,這里是20 server-id=20# 開啟binlog log-bin=master-bin log-bin-index=master-bin.index # 找到 bind-address = 127.0.0.1,將其改成以下代碼,使服務(wù)器可以接受遠程訪問: bind-address = 0.0.0.04. 測試服務(wù)器配置
重啟服務(wù)器:
$ sudo service mysql restart登錄服務(wù)器:
$ mysql -u root -h mysql-primary -p $ mysql -u repl -h mysql-primary -p查看binlog是否已工作:
mysql> SHOW MASTER STATUS;# 一般情況下會出現(xiàn)下面的輸出: +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | master-bin.000001 | 1285 | | | +-------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)三、配置從服務(wù)器
1. 先登上MySQL服務(wù)器
$ sudo mysql -u root -p2. 準備用戶
# 為root用戶添加遠程訪問數(shù)據(jù)庫的能力,方便測試數(shù)據(jù)(這一步并不是必須的) mysql> GRANT ALL ON *.* TO 'root'@'%';3. 配置服務(wù)器
編輯mysql配置文件,在Ubuntu中,文件路徑為:/etc/mysql/mysql.conf.d/mysqld.cnf:
# 在[mysqld]下面增加下面代碼 # 數(shù)據(jù)主唯一標識,一般為本機IP最后一個數(shù)字,這里是21 server-id=21 # 找到 bind-address = 127.0.0.1,將其改成以下代碼,使服務(wù)器可以接受遠程訪問: bind-address = 0.0.0.0重啟服務(wù)器
$ sudo service mysql restart連上MySQL,配置從服務(wù)器并啟用:
mysql> CHANGE MASTER TO master_host='mysql-primary',master_port=3306,master_user='repl',master_password='repl_password',master_log_file='master-bin.000001',master_log_pos=0; mysql> start slave;master_log_file 是主服務(wù)器上執(zhí)行SHOW MASTER STATUS獲取的主MySQL的binlog信息。
查看slave是否已工作:
mysql> SHOW SLAVE STATUS\G;# 輸出類似以下情形: *************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: mysql-primaryMaster_User: rootMaster_Port: 3306Connect_Retry: 60Master_Log_File: master-bin.000002Read_Master_Log_Pos: 922Relay_Log_File: mysql-secondary-relay-bin.000002Relay_Log_Pos: 1089Relay_Master_Log_File: master-bin.000002Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 922Relay_Log_Space: 1306Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 20Master_UUID: 8f9360b6-4fc7-11e8-bf34-525400c8c952Master_Info_File: /var/lib/mysql/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec)四、測試
配置好了,那就測試一下:
五、結(jié)語
這里配置好了主從,但是并沒有做高可用,嗯,下一個攻擊點,MySQL高可用。
轉(zhuǎn)載于:https://my.oschina.net/kut/blog/1807414
總結(jié)
- 上一篇: Android环境下通过C框架层控制WI
- 下一篇: Django之Form组件