您的位置:首页 > 数据库 > MySQL

搭建MySQL数据的主从复制环境

2014-08-24 22:35 801 查看
其配置详细过程如下:

   1、环境架构:

       CentOS release 5.9 (Final)         mysql-5.5.11-linux2.6-x86_64.tar.gz

       Master:192.168.56.171/24                 Slave:192.168.56.173/24

   2 、安装mysql-5.5.11,需要在主节点和备节点上安装mysql

       

Master:

安装环境准备:

为mysql的安装提供前提环境和初始化安装mysql

创建数据库目录

# mkdir -p /database/smart/data        

# mkdir -p /database/smart/relaylog/

# mkdir -p /database/smart/binlog

注:smart为项目的名字

创建mysql用户

# useradd -r mysql

 

修改权限

# chown -R mysql.mysql /database/smart/

解压mysql软件包

# tar zvxf mysql-5.5.11-linux2.6-x86_64.tar.gz -C  /usr/local/    --解压到/usr/local/目录

创建连接,为了方便查看mysql的版本等信息

# cd  /usr/local/

# ln -sv mysql-5.5.11-linux2.6-x86_64  mysql

修改属主属组

# cd mysql

# chown -R root.mysql ./*

编辑配置文件,提供数据目录

# cp  /etc/my.cnf   /etc/my.cnf.bak

# echo "" >/etc/my.cnf

# vim /etc/my.cnf     --把<主从复制主服务器标准配置my.cnf>粘贴进来

port            = 3306,根据实际需要来更改端口号

server-id=171   必须是唯一的,我们可以设置为IP地址的最后一位,例如192.168.56.171,这里就是171, 

log-bin=/database/smart/binlog/smart_master-bin  主服务器二进制日志文件前缀名   设置启动二进制日志和索引

log-bin-index=/database/smart/binlog/smart_master-bin.index 索引文件

innodb_file_per_table= 1     开启innodb的每表一个文件的设置     

datadir=/database/smart/data/     数据目录路径

binlog_format = mixed   日志滚动方式 

初始化数据库  

cd /usr/local/mysql

#  ./scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql  

  

提供服务脚本

# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

添加至服务列表

# chkconfig --add mysqld

# chkconfig --list mysqld

# chkconfig mysqld on

启动mysql (使用mysqld_safe启动脚本)

#  ./bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &    

为了便于下面的测试,设置环境变量

# vim /etc/profile.d/mysql.sh

export PATH=$PATH:/usr/local/mysql/bin

执行环境变量脚本,使其立即生效

# . /etc/profile.d/mysql.sh     增加mysql的环境变量

mysql的安装配置完成,下面增加一个用于同步数据的账户并设置相关的权限吧!

 

建立用户账户,增加mysql帐号,并设置权限和密码

mysql> grant replication slave on *.* to 'chris'@'172.16.%.%' identified by 'work';

刷新数据使其生效

mysql> flush privileges;

至此我们mysql的Master设置完成,下面进行slave端的设置吧!

Slave

  安装环境配置:

创建数据库目录

# mkdir -p /database/smart/data        

# mkdir -p /database/smart/relaylog/

# mkdir -p /database/smart/binlog

注:smart为项目的名字

创建mysql用户

# useradd -r mysql

 

修改权限

# chown -R mysql.mysql /database/smart/

解压mysql软件包

# tar zvxf mysql-5.5.11-linux2.6-x86_64.tar.gz -C  /usr/local/    --解压到/usr/local/目录

创建连接,为了方便查看mysql的版本等信息

# cd  /usr/local/

# ln -sv mysql-5.5.11-linux2.6-x86_64  mysql

修改属主属组

# cd mysql

# chown -R root.mysql ./*

编辑配置文件,提供数据目录

# cp  /etc/my.cnf   /etc/my.cnf.bak

# echo "" >/etc/my.cnf

# vim /etc/my.cnf     --把<主从复制从服务器标准配置my.cnf>粘贴进来

port            = 3306,根据实际需要来更改端口号

server-id=173   必须是唯一的,我们可以设置为IP地址的最后一位,例如192.168.56.173,这里就是173, 

#log-bin=/database/smart/binlog/smart_master-bin  禁用二进制日志,从服务器不需要二进制日志文件

innodb_file_per_table= 1     开启innodb的每表一个文件的设置     

datadir=/database/smart/data/     数据目录路径

relay-log-index = /database/smart/relaylog/smart-relay-bin.index  中继日志索引

relay-log-info-file = /database/smartedm/relaylog/smartedm-relay-bin

relay-log = /database/smart/relaylog/smart-relay-log.info  设置中继日志

初始化数据库  

cd /usr/local/mysql

#  ./scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql  

  

提供服务脚本

# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

添加至服务列表

# chkconfig --add mysqld

# chkconfig --list mysqld

# chkconfig mysqld on

启动mysql (使用mysqld_safe启动脚本)

#  ./bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &    

设置环境变量

# vim /etc/profile.d/mysql.sh

export PATH=$PATH:/usr/local/mysql/bin

执行环境变量脚本,使其立即生效

# . /etc/profile.d/mysql.sh    

 到这slave服务的mysql安装和配置完成,下面启动slave复制吧,开启之前先查看下从服务上的二进制文件吧

#在Master上执行查看二进制文件

Master_mysql> show master status;  

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

| File                    | Position | Binlog_Do_DB       | Binlog_Ignore_DB |

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

| smart_master-bin.000004 |      107 | smart,firstdb,test | mysql            | 

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

1 row in set (0.00 sec)

slave_mysql> show slave status;   未开启复制功能的时候,slave状态是空的

Empty set (0.00 sec)

在从服务器上开启复制功能

change master to master_host='192.168.56.171',master_user='chris',master_password='work',master_log_file='smart_master-bin.000004',master_log_pos=107;   添加复制数据的主服务器的IP,用户和密码。以及二进制日至名和复制位置

mysql> show slave status\G;

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

               Slave_IO_State: 

                  Master_Host: 192.168.56.171   主服务器的IP和用户名,端口信息

                  Master_User: chris

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: smart_master-bin.000004

          Read_Master_Log_Pos: 107

               Relay_Log_File: smart-relay-log.000001

                Relay_Log_Pos: 4

        Relay_Master_Log_File: smart_master-bin.000004

             Slave_IO_Running: No     从服务器上的数据库复制进程,此时还没开启,所以都是No 的

            Slave_SQL_Running: No     从服务器上的数据库复制进程,此时还没开启,所以都是No 的

至此我们的mysql服务器的主从复制架构已经基本完成,下面开启服务并测试测试吧~

在从服务器开启复制进程

:mysql>start slave;

 

mysql> show slave status\G;

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

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.56.171

                  Master_User: chris

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: smart_master-bin.000004

          Read_Master_Log_Pos: 107

               Relay_Log_File: smart-relay-log.000002

                Relay_Log_Pos: 260

        Relay_Master_Log_File: smart_master-bin.000004

             Slave_IO_Running: Yes  开启slave服务以后,这两个进程自动启动

            Slave_SQL_Running: Yes  开启slave服务以后,这两个进程自动启动

              Replicate_Do_DB: firstdb,smart,test
              Replicate_Ignore_DB: mysql

主服务器

mysql> create database smart;

Query OK, 1 row affected (0.00 sec)

mysql> create database firstdb;

从服务器

mysql> show databases;

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

| Database           |

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

| information_schema | 

| firstdb            | 

| mysql              | 

| performance_schema | 

| smart              | 

| test               | 

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

6 rows in set (0.00 sec)

在主数据上创建两个数据库,在从服务器上可以很快的查看到,至此我们的主从架构已经实现。

至此我们mysql服务器的主从复制架构已经完成,但是我们现在的主从架构并不完善,因为我们的从服务上还可以进行数据库的写入操作,一旦用户把数据写入到从服务器的数据库内,然后从服务器从主服务器上同步数据库的时候,会造成数据的错乱,从而会造成数据的损坏,所以我们需要把从服务器设置成只读~方法如下:

注意:read-only = ON ,这项功能只对非管理员组以为的用户有效!

mysql> show global variables like 'read%';

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

| Variable_name        | Value   |

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

| read_buffer_size     | 4194304 | 

| read_only            | OFF     |  注意这是个全局变量,只有管理员才能有权限进行修改

| read_rnd_buffer_size | 8388608 | 

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

3 rows in set (0.00 sec)

mysql> SET GLOBAL read_only=1;  可以在这里直接修改,但是一旦重启服务器就会消失,想要永久生效,在/etc/my.cnf内增加以下内容read_only = ON即可

mysql> show global variables like 'read%';

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

| Variable_name        | Value   |

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

| read_buffer_size     | 4194304 | 

| read_only            | ON      | 

| read_rnd_buffer_size | 8388608 | 

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

3 rows in set (0.00 sec)

[root@mic2 ~]# vi /etc/my.cnf     

[mysqld]

read_only=1或是read-only = ON  在配置文件内添加这行就可设置为只读模式了。注意修改的是slaved的配置文件

参考文档 http://chrinux.blog.51cto.com/6466723/1204586 作者chrinux
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: