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

其配置详细过程如下:
   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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值