天天看點

MYSQL 主從複制讀寫分離實作

概述:

根據項目要求,我們編寫一個基于CentOS平台的MYSQL主從部署手冊。

為了縮減本文檔體積和友善大家部署使用,将不提供操作截圖,隻提供需要輸入的指令,友善大家複制粘貼指令行。

Mysql 安裝準備:

測試機IP準備::

• 主伺服器Master: 192.168.1.136

• 從伺服器Slave : 192.168.1.137

測試機yum準備:

Yum位址:http://centos.ustc.edu.cn/centos/(根據網絡狀況選擇适合源位址)

Yum部署:

#cd /etc/yum.repos.d

#mv CentOS-Base.repo  CentOS-Base.repo.save

#wget http://centos.ustc.edu.cn/CentOS-Base.repo

#vi /etc/yum.repos.d/CentOS-Base.repo

把[centosplus] 中的 enabled=0 改為enabled=1

安裝包準備:

• Mysql:http://221.1.222.15:82/down/mysql-5.1.55.tar.gz

主從安裝:

裝mysql,推薦主從兩台伺服器安裝相同版本Mysql

#useradd mysql -s /sbin/nologin

#cd /usr/src

#wget http://221.1.222.15:82/down/mysql-5.1.55.tar.gz

#tar zxvf mysql-5.1.55.tar.gz

#cd mysql-5.1.55

#./configure --prefix=/usr/local/mysql  --localstatedir=/opt/data --with-extra-charsets=utf8,gb2312,gbk --with-pthread --enable-thread-safe-client

注:配置過程制定資料庫檔案的位置及額外字元集,可以根據情況選擇

#make

#make install

#cp support-files/my-large.cng /etc/my.cnf

#cd /usr/local/mysql

#chgrp –R mysql .

成基本的庫、表

#/usr/local/mysql/bin/mysql_install_db --user=mysql

認生成的庫、表,并授權

# cd /opt/data

# pwd

/opt/data

# ll       //務必生成相應的庫、表

#chown –R mysql:mysql /opt/data

置root密碼:

#/usr/local/mysql/bin/mysqladmin –uroot password “q1w2e3r4”

以上操作過程主、從伺服器均相同。

主從配置:

改配置檔案:

主伺服器Master:

#vi /etc/my.cnf

[mysqld]  

log-bin=mysql-bin  

server-id=1     //預設是1,保持不變

  從伺服器Slave

    #vi /etc/my.cnf

server-id=2    //預設是1,修改為大于等于2的數字,但不要太離譜的9999….

動mysql服務:

#/usr/local/mysql/bin/mysqld_safe –user=mysql& //這個動作主從伺服器相同

主伺服器建立帳戶并授權Slave:

#GRANT REPLICATION SLAVE ON *.* to 'root'@'192.168.1.137' identified by 'q1w2e3r4';//帳戶建議使用非root帳号密碼,本指令行僅示例

詢主資料庫Master的狀态,并記錄狀态值:

mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

| mysql-bin.000003 |     640  |              |                  |

1 row in set (0.00 sec)

注:執行完此步驟後不要再操作主伺服器MYSQL,防止主伺服器狀态值變化

置從伺服器Slave:

Mysql>change master to master_host=‘192.168.1.136’,master_user=‘root’,master_password=’q1w2e3r4’,master_log_file=’ mysql-bin.000003’,master_log_pos=640;

注:此指令行帳戶資訊,與主伺服器授權帳号資訊一緻

動從伺服器複制功能:

Mysql>start slave;

查從伺服器複制功能狀态:

mysql> show slave status\G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.1.136  //主伺服器位址

                  Master_User: root         //授權帳戶名,盡量避免使用root

                  Master_Port: 3306        //資料庫端口,部分版本沒有此行

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000003

          Read_Master_Log_Pos: 1203

               Relay_Log_File: localhost-relay-bin.000002

                Relay_Log_Pos: 251

        Relay_Master_Log_File: mysql-bin.000003

             Slave_IO_Running: Yes       //此狀态必須YES

            Slave_SQL_Running: Yes       //此狀态必須YES

注:Slave_IO及Slave_SQL程序必須正常運作,即YES狀态,否則都是錯誤的狀态(如:其中一個NO均屬錯誤)。

以上操作過程,主從伺服器配置完成。

主從伺服器測試:

伺服器Mysql,建立資料庫,并在這個庫中建表插入一條資料:

mysql> create database hichina_db;

mysql> use hichina_db;

mysql> create table hichina_tb(id int(3),name char(10));

mysql> insert into hichina_tb values (001,'bobwu');

伺服器Mysql查詢:

mysql> show databases;

+--------------------+

| Database           |

| information_schema |

| hichina_db         |  //我在這裡

| mysql              |

| test               |

4 rows in set (0.00 sec)

Database changed

mysql> show tables;

+----------------------+

| Tables_in_hichina_db |

| hichina_tb           |  //我在這裡

mysql> select * from hichina_tb;

+------+--------+

| id   | name   |

|    1 | bobwu  |   //我在這裡