centos 下配置Mysql主從

jopen 10年前發布 | 11K 次閱讀 MySQL 數據庫服務器

Mysql主從方案介紹mysql主從方案主要作用:
讀寫分離,使數據庫能支撐更大的并發。在報表中尤其重要。由于部分報表sql語句非常的慢,導致鎖表,影響前臺服務。如果前臺使用master,報表使用slave,那么報表sql將不會造成前臺鎖,保證了前臺速度。
發揚不同表引擎的優點。目前Myisam表的查詢速度比innodb略快,而寫入并發innodb比myIsam要好。那么,我們可以使用innodb作 為master,處理高并發寫入,使用master作為slave,接受查詢。或在myisam slave中建立全文索引,解決innodb無全文索引的弱點。
熱備,slave和master的數據“準實時”同步。
準備工作。先分別安裝兩臺MYSQL
配置MASTER。找到my.cnf文件,修改:

server-id                = 1
log_bin                        = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
binlog_do_db                = DB_AdidasFootball
binlog_do_db                = DB_CodeBuilder
binlog_ignore_db        = test

其中,作為主機,server-id必須為1.
binlog_do_db為需要復制的db。 binlog_ignore_db為忽略復制的db。需要增加DB的話,就增加相應的一行。
重啟master數據庫,運行檢查:

mysql> show master status; #檢查是否以master形式啟動了。
+------------------+----------+----------------------------------+------------------+
| File             | Position | Binlog_Do_DB                     | Binlog_Ignore_DB |
+------------------+----------+----------------------------------+------------------+
| mysql-bin.000002 |     1087 | DB_AdidasFootball,DB_CodeBuilder | test             |
+------------------+----------+----------------------------------+------------------+
1 row in set (0.00 sec)

mysql> show variables like "%log%";
#需要看到這樣的一行,說明binlog已經開啟了: log_bin | ON


在master上為slave建立用戶

mysql> grant replication slave, reload, super on *.* to 'slave'@'10.*' identified by '123456';
 注意:10.*這里是ip 即從庫的ip 192.168.1.2


這樣,主機配置完畢。

配置slave

server-id = 2  #隨便什么數字,多臺slave注意不能為重復就可以了。
#log_bin = /var/log/mysql/mysql-bin.log #slave的binlog就沒有必要再開啟了。注釋掉。
master-host = 192.168.0.3    #master的IP
master-user = slave        #上面操作中,建立的用戶名
master-password = 123456       #上面操作中,建立的密碼


重啟slave, 檢查salve狀態

slave:mysql> show slave status;
#很多很多列

slave:mysql>stop slave;   #停掉slave的復制先。
slave:mysql>change master to master_host='192.168.1.2' , 
master_user='slave' , master_password='123456' , 
master_log_file='mysql-bin.000014' ,  master_log_pos=279;#更新master 
slave:mysql>start slave; #啟動slave的復制。
slave:mysql>show slave status; #查看slave狀態,包含兩個YES則成功了。



接下來,將主機數據 copy 過來這個流程比較復雜:)各個步驟注意所在的機器

slave:mysql> stop slave;   #停掉slave的復制先。

master:mysql> flush tables with read lock; #鎖掉master服務器的所有表,禁止寫入。

master:mysql> show master status; #還是上面的語句,查看并記錄下 File mysql-bin.000002, Position 1087
+------------------+----------+----------------------------------+------------------+
| File             | Position | Binlog_Do_DB                     | Binlog_Ignore_DB |
+------------------+----------+----------------------------------+------------------+
| mysql-bin.000002 |     1087 | DB_AdidasFootball,DB_CodeBuilder | test             |
+------------------+----------+----------------------------------+------------------+
1 row in set (0.00 sec)

chluo@master:~$ mysqldump AdidasFootball > AdidasFootball.sql  #在命令行中導出DB的數據,這里是bash操作:)

master:mysql> unlock tables; #導出完成之后,解鎖。 master可以繼續跑起來了。

chluo@slave:~$ mysql AdidasFootball < AdidasFootball.sql  #在slave的命令行中導入DB的數據,這里又是bash操作:)

slave:mysql> change master to
    -> master_log_file='mysql-bin.000002',  #將這里修改為剛記錄下來的數據
    -> master_log_pos=1087;   #還有這里

slave:mysql> start slave;

 

完成。
注意事項 從機必須有其需要的數據庫,才能夠進行同步,否則會忽略。

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!