mysql的主從配置

linux日常服務部署平時練習的少,所以抽時間自己寫一寫自己搭建服務 過程

以下是筆記以及總結:

Mysql主從(Mysql Reolication),主要用於mysql的實時備份或者讀寫分離。在配置前先做好準備工作,配置2臺mysql服務器,一臺做master,一臺做slave。

    mysql主從的原理其實就是:在每個從儘可以設置一個主,主在實行sql後,記錄二進制log文件,從連接上主,並從主獲得binlog,存於本地relay-log,並從上次記住的位置起,執行sql。一旦遇到錯誤則停止同步。

    因此可以有這些推論:主從之間 數據不是實時同步的,就算網絡連接正常,也存在瞬間,主從數據 不一致。如果主從網絡斷開,會從網絡正常後,批量同步。如果對從進行數據修改,那麼很可能從在執行主的bin-log時出現了錯誤而停止同步,這個是很危險 操作。所以一般情況下,要非常小心的修改從上的數據。

    那麼有一個衍生的配置是雙主,互爲主從配置,只要雙方修改不衝突,可以工作良好。如果需要多主 話,可以使用環形配置,這樣任意一個節點 修改都可以同步到所有節點。可以應用在讀寫分離的場景中,用於降低單臺mysql服務器的io。可以實現mysql服務的HA集羣,可以是1主多從,也可以hi互相主從(主主)

    首先現在2臺機器上分別安裝mysql

一臺爲mysql master :192.168.186.130

一臺爲mysql slave : 192.168.186.132

主機上端口號設置爲
[mysqld]
port            = 3306

從機上的端口號設置爲

port             =3307

先在主機上創建一個庫

進入mysql

create database db1;

然後退出導出數據給db1

mysqldump -uroot -S /tmp/mysql2.sock mysql > 123.sql
mysql -uroot -S /tmp/mysql2.sock db1 < 123.sql


配置主機(master)

vim /etc/my.cnf


添加修改

server-id=1

log-bin=mysql-bin

binlog-do-db=db1

(兩個可選參數 2 選 1:
binlog-do-db=db1,db2 #用來指定需要同步的庫
binlog-ignore-db=db1,db2 #指定忽略不同步的庫)

設置按成後,重啓mysql

然後授權一個用戶,在從機上用來向主機進同步

> grant replication slave on *.* to 'repl'@'192.168.186.132' identified by 'lxx123456';
> flush tables with read lock;
> show master status; #一定要記住前兩列的內容,後面會用到


 設置從機的配置

vim /etc/my.cnf

修改相應的server-id  =2 (不能 和主機一樣)

log-bin=mysql-bin 

如果主機上配置了指定數據庫參數的話,這裏就不必配置了

重啓mysql


拷貝主的數據庫db1到從上來

mysqldump -S /tmp/mysql.sock db1 > 123.sql;

mysql -uroot -S /tmp/mysql.sock -e "create database db1";

mysql  -S /tmp/mysql.sock db1 < db1.sql;


登陸從的mysql

執行以下命令

> slave stop;

> change master to master_host='192.168.186.130', master_port=3306, master_user='repl',
master_password='lxx123456', master_log_file='mysql-bin.000002', master_log_pos=106;
> slave start;

然後到主上執行

# mysql -e "unlock tables";

在從上查看狀態
> show slave status\G;
看是否有如下顯示
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

只有兩個同時爲 YES,纔算正常。

wKiom1ZJunqDThh4AAA9YMH6CUs767.png

建議: MySQL 主從機制比較脆弱,謹慎操作。如果重啓 master,務必要先把 slave 停掉,
也就是說需要在 slave 上去執行 slave stop 命令,然後再去重啓 master 的 mysql 服務,否則
很有可能就會中斷了。當然重啓完後,還需要把 slave 給開啓 slave start。


這裏特別注意一下,如果修改過my.cnf文件後,再執行slave同步的話,會出現錯誤:

ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log

原因:

該服務器之前做過主從複製,中途修改過my.cnf配置文件,重啓mysql之後,binlog文件名和relay-log文件名已經改變,所以不能再從之前的relay-log複製了.

解決辦法

mysql> reset slave;

Query OK, 0 rows affected (0.00 sec)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章