其配置详细过程如下:
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
# 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
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的配置文件
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为项目的名字
# 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的配置文件