linux下配置mysql主從

來源:互聯網
上載者:User

標籤:linux   mysql   centos   主從   

為了做實驗方便,我們在同一台機器上配置兩個MySQL服務(開兩個連接埠) 

1、安裝、配置MySQL

事先已經安裝好mysql;

[[email protected] ~]# cd /usr/local/[[email protected] local]# cp -r mysql/ mysql_2[[email protected] local]# cd mysql_2/

初始化mysql2,如果出現兩個 “OK” 並且產生/data/mysql2目錄說明正確;

[[email protected] mysql_2]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql2

拷貝設定檔

[[email protected] mysql_2]# cp /etc/my.cnf ./my.cnf

修改設定檔相關參數,更改port 以及 socket ,並增加datadir=/data/mysql2

[[email protected] mysql_2]# vi my.cnf [mysqld]port            = 3307socket          = /tmp/mysql2.sockdatadir=/data/mysql2


啟動:

[[email protected] mysql_2]# /usr/local/mysql_2/bin/mysqld_safe --defaults-file=/usr/local/mysql_2/my.cnf --user=mysql &

如果想開機啟動,需加入到/etc/rc.local 裡;

# echo "/usr/local/mysql_2/bin/mysqld_safe --defaults-file=/usr/local/mysql_2/my.cnf --user=mysql &" >> /etc/rc.d/rc.local


netstat查看已經有2個mysqld服務:

[[email protected] mysql2]# netstat -nlp |grep mysqldtcp        0      0 0.0.0.0:3306                0.0.0.0:*     LISTEN      1203/mysqld    tcp        0      0 0.0.0.0:3307                0.0.0.0:*     LISTEN      1744/mysqld    unix  2      [ ACC ]     STREAM     LISTENING     8804   1203/mysqld   /tmp/mysql.sockunix  2      [ ACC ]     STREAM     LISTENING     14159  1744/mysqld   /tmp/mysql2.sock


2、 配置主從準備工作

設定mysql_2 為主(master)連接埠3307,mysql為從(slave)連接埠為3306 

使用sock檔案登入主mysql

[[email protected] mysql2]# /usr/local/mysql_2/bin/mysql -uroot -S /tmp/mysql2.sock

-S 後面指定mysql的socket檔案路徑,這也是登陸mysql的一種方法,因為在一台伺服器上跑了兩個mysql連接埠,所以,只能用 -S 這樣的方法來區分。

在主上建立測試庫db1

mysql> create database db1;mysql> quit

匯出主的mysql庫資料然後匯入給db1

[[email protected] mysql2]# /usr/local/mysql_2/bin/mysqldump -uroot -S /tmp/mysql2.sock mysql > 123.sql[[email protected] mysql2]# /usr/local/mysql_2/bin/mysql -uroot -S /tmp/mysql2.sock db1 < 123.sql


3、配置主(master)

vim /usr/local/mysql_2/my.cnf

在[mysqld]部分查看是否有以下內容,如果沒有則添加:

server-id=1

log-bin=mysql-bin  

兩個選擇性參數(2選1):

binlog-do-db=db1,db2 #需要同步的庫

binlog-ignore-db=db1,db2 #忽略不同步的庫

binlog-do-db=需要複製的資料庫名,多個資料庫名,使用逗號分隔。binlog-ignore-db=不需要複製的資料庫庫名,多個資料庫名,使用逗號分隔。

修改設定檔後,重啟mysql_2

[[email protected] mysql2]# pid=`ps aux |grep mysql2.sock |grep -v grep |awk ‘{print $2}‘`[[email protected] mysql2]# kill $pid[[email protected] mysql_2]# /usr/local/mysql_2/bin/mysqld_safe --defaults-file=/usr/local/mysql_2/my.cnf --user=mysql &

設定root密碼:

[[email protected] mysql2]# /usr/local/mysql_2/bin/mysqladmin -uroot -S /tmp/mysql2.sock password ‘123456‘[[email protected] mysql2]# /usr/local/mysql_2/bin/mysql -uroot -S /tmp/mysql2.sock -p123456

mysql> grant replication slave on *.* to ‘repl‘@‘127.0.0.1‘ identified by ‘123123‘;

//這裡的repl是為slave端設定的訪問master端mysql資料的使用者,密碼為123123,這裡的127.0.0.1為slave的ip(本次實驗配置的master和slave都在本機)。

mysql> flush privileges;    //重新整理庫,記憶體的資料寫入磁碟;

mysql> flush tables with read lock;

//鎖定資料庫,此時不允許更改任何資料

mysql> show master status;+------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000004 |      378 |              |                  |+------------------+----------+--------------+------------------+
//查看狀態,這些資料是要記錄的,一會要在slave端用到;

4、 設定從(slave)

vim /etc/my.cnf  #修改或增加

server-id = 2 #這個數值不能和主一樣

選擇性參數:replicate-do-db=db1,db2 

replicate-ignore-db=db1,db2 #意義同主的那兩個選擇性參數

重啟從的mysql服務:service mysqld restart

拷貝主的db1庫資料到從:

先匯出db1.sql檔案,然後在從資料庫中同樣建立資料庫db1,匯入主的db1.sql檔案到從;

[[email protected] ~]# /usr/local/mysql_2/bin/mysqldump -uroot -S /tmp/mysql2.sock -p123456 db1 > db1.sql[[email protected] ~]# /usr/local/mysql/bin/mysql -uroot -S /tmp/mysql.sock -e "create database db1"[[email protected] ~]# /usr/local/mysql/bin/mysql -uroot -S /tmp/mysql.sock db1 < db1.sql

登陸從的mysql

[[email protected] ~]# /usr/local/mysql/bin/mysql -uroot -S /tmp/mysql.sock mysql> slave stop;mysql> change master to master_host=‘127.0.0.1‘,master_port=3307,master_user=‘repl‘,master_password=‘123123‘,master_log_file=‘mysql-bin.000004‘,master_log_pos=378;

//master_log_file=‘mysql-bin.000004‘,master_log_pos=378為主show master status顯示的前2列內容;

mysql> slave start;


主上,解鎖表: 

[[email protected] ~]# /usr/local/mysql_2/bin/mysql -uroot -S /tmp/mysql2.sock -p123456 -e "unlock tables"

登入從

[[email protected] ~]# /usr/local/mysql/bin/mysql -uroot -S /tmp/mysql.sock

查看從的狀態 show slave status\G;

確認以下兩項參數都為yes:

Slave_IO_Running: Yes 

Slave_SQL_Running: Yes

mysql> show slave status\G;*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 127.0.0.1                  Master_User: repl                  Master_Port: 3307                Connect_Retry: 60              Master_Log_File: mysql-bin.000004          Read_Master_Log_Pos: 378               Relay_Log_File: localhost-relay-bin.000002                Relay_Log_Pos: 251        Relay_Master_Log_File: mysql-bin.000004             Slave_IO_Running: Yes            Slave_SQL_Running: Yes              Replicate_Do_DB:          Replicate_Ignore_DB:           Replicate_Do_Table:       Replicate_Ignore_Table:      Replicate_Wild_Do_Table:  Replicate_Wild_Ignore_Table:                   Last_Errno: 0                   Last_Error:                 Skip_Counter: 0          Exec_Master_Log_Pos: 378              Relay_Log_Space: 410              Until_Condition: None               Until_Log_File:                Until_Log_Pos: 0           Master_SSL_Allowed: No           Master_SSL_CA_File:           Master_SSL_CA_Path:              Master_SSL_Cert:            Master_SSL_Cipher:               Master_SSL_Key:        Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: No                Last_IO_Errno: 0                Last_IO_Error:               Last_SQL_Errno: 0               Last_SQL_Error:


5、 測試主從

主上清空db1庫的db表 :

登入主

[[email protected] ~]# mysql -uroot -S /tmp/mysql2.sock -p123456mysql> use db1;mysql> select count(*) from db;+----------+| count(*) |+----------+|        2 |+----------+

清空db表;

mysql> truncate table db;mysql> select count(*) from db; +----------+| count(*) |+----------+|        0 |+----------+

進入slave,查看db1庫db表,和主的資料一樣,表示同步OK;

[[email protected] ~]# mysql -uroot -S /tmp/mysql.sock mysql> use db1;mysql> select count(*) from db;+----------+| count(*) |+----------+|        0 |+----------+

登入主,刪除表db;

[[email protected] ~]# mysql -uroot -S /tmp/mysql2.sock -p123456mysql> drop table db;

登入從,查看db表不存在;

[[email protected] ~]# mysql -uroot -S /tmp/mysql.sock mysql> select * from db;ERROR 1146 (42S02): Table ‘db1.db‘ doesn‘t exist


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



本文出自 “模範生的學習部落格” 部落格,請務必保留此出處http://8802265.blog.51cto.com/8792265/1655877

linux下配置mysql主從

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.