mysql主從配置
-
主從介紹
-
MySQL復制允許將主實例(master)上的數據同步到一個或多個從實例(slave)上,默認情況下復制是異步進行的,從庫也不需要一直連接主庫來同步數據。
-
MySQL復制的數據粒度可以是主實例上所有的數據庫,也可以是指定的一個或多個數據庫,也可以是一個數據庫里的指定的表。
-
MySQL復制帶來的優勢在於:
-
擴展能力:
通過復制可以將MySQL的性分到一個或多個slave上。這要求所有的寫操作和修改操作都必須在Master上完成,而讀操作可以被分配到一個或多個salve上。將讀寫分離到不同服務執行之后,MySQL的讀寫性能得到提升。
-
數據庫備份:
由於從實例時同步主實例的數據,所以可以將備份作業部署到從庫。
-
數據分析和報表:
同樣,一些數據分析和報表的實現可以在從實例執行,以減少對主庫的性能影響。
-
容災能力:
可以在物理距離較遠的另一個數據建立slave,保證在主實例所在地區遭遇災難時,在另一個數據中心能快速恢復。
-
說明
兩台mysql服務器,一台作為主服務器,一台作為從服務器,主服務器進行寫操作、從服務器進行讀操作
主服務器數據庫:192.168.64.135
從服務器數據庫:192.168.3.134
2、軟件安裝
-
使用ubuntu apt安裝mysql,默認安裝APT軟件包存儲庫中的mysql
$ sudo apt install -y mysql-server mysql-client libmysqlclient-dev
-
如果想安裝最新版mysql,需要按照如下操作:
安裝mysql 8.0
3、配置主服務器數據庫
-
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到如下內容並對應修改
#服務器唯一標識
server-id = 1
#啟動MySQL二進制日志
log_bin = /var/log/mysql/mysql-bin.log
#指定需要同步的數據庫,自定義,如需指定多個,再添加一行
binlog_do_db = ops
binlog_do_db = el_hub
#指定不需要同步的數據庫
binlog_ignore_db = mysql
bind-address = 0.0.0.0
-
重啟mysql服務
$ sudo systemctl restart mysql
-
使用apt安裝mysql無法設置密碼,需要查看初始密碼執行以下語句:
sudo cat /etc/mysql/debian.cnf
-
創建ops和hub的數據庫(兩台服務器上都要操作)
sudo mysql -uroot -p
填入初始密碼:41McNSXsfgLBVwfj
create database ops charset utf8;
create database el_hub charset utf8;
-
登錄主服務器數據庫創建從服務器用到的賬戶和權限
$ sudo mysql -uroot -p
填入初始密碼:41McNSXsfgLBVwfj
mysql> create user 'hongpu'@'%' identified by 'hongpu8192';
Query OK, 0 rows affected (0.03 sec)
mysql> grant all on *.* to 'hongpu'@'%';
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>show master status;
4、配置從服務器數據庫
-
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到如下內容並修改:
server-id = 2 #必須與主服務器數據庫不一樣
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = marhal
binlog_ignore_db = mysql
-
重啟mysql服務
$sudo systemctl restart mysql
-
使用apt安裝mysql無法設置密碼,需要查看初始密碼執行以下語句:
sudo cat /etc/mysql/debian.cnf
-
登錄從服務器數據庫配置
$ mysql -u root -p
初始密碼:7cogZ3zHNZkHB3wT
mysql> change master to \
master_host='192.168.64.135', \
master_port=3306, \
master_user='hongpu', \
master_password='hongpu8192', \
master_log_file='mysql-bin.000003', \
master_log_pos=154;
master_log_file='mysql-bin.000001', //上面截圖的File字段值
master_log_pos=1095; //上面截圖的Position字段值
>start slave;
#查看slave信息
>show slave status\G;
至此,已配置成功
5、常見情況處理
問題:記錄刪除失敗
解決方法:master要刪除一條記錄,而slave上因找不到要刪除的記錄而報錯,這種情況說明從機都已經刪除過了,那么從機可以直接跳過
stop slave;
set global sql_slave_skip_counter=1;
start slave;