天天看点

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  |   //我在这里