Mysql主從方案介紹mysql主從方案主要做用:
讀寫分離,使數據庫能支撐更大的併發。在報表中尤爲重要。因爲部分報表sql語句很是的慢,致使鎖表,影響前臺服務。若是前臺使用master,報表使用slave,那麼報表sql將不會形成前臺鎖,保證了前臺速度。
發揚不一樣表引擎的優勢。目前Myisam表的查詢速度比innodb略快,而寫入併發innodb比myIsam要好。那麼,咱們可使用innodb做 爲master,處理高併發寫入,使用master做爲slave,接受查詢。或在myisam slave中創建全文索引,解決innodb無全文索引的弱點。
熱備,slave和master的數據「準實時」同步。
準備工做。先分別安裝兩臺MYSQL
配置MASTER。找到/ect/my.cnf文件,修改:php
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
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創建用戶
sql
mysql> grant replication slave on *.* to 'testuser'@'192.168.2.77' identified by 'testpassword';
注意:這裏是ip 192.168.2.77即從庫的ip
數據庫
這樣,主機配置完畢。
配置slave
bash
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;
完成。
注意事項 從機必須有其須要的數據庫,纔可以進行同步,不然會忽略。ide