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

基于RHEL6.0的mysql服务器复制的主从架构实现

2012-04-10 18:30 1071 查看
基于[/b]RHEL6.0[/b]的[/b]mysql[/b]服务器复制的主从架构实现[/b]

说明:本文选用172.16.22.1作为主服务器,172.16.22.3作为从服务器
从服务器的mysql软件版本应大于或等于主服务器的mysql软件版本
主服务器与从服务器的server-id 应不同
mysql服务器的主从架构工作原理:
主服务器的dump线程将二进制日志读给从服务器的一个I/O线程;
从服务器的I/O线程将接收到的二进制日志读给中继日志;
从服务器的SQL线程一次将从中继日志中读出一句,执行一次。这样就实现了主服务数据的改变异步到从服务器上了。

一、准备条件:安装mysql(本文选用类似于一种绿色软件的方式安装mysql,特点:方便、快捷)
1.在172.16.22.1主机上安装mysql-5.5.20
(1).准备数据存放的文件系统
新建一个逻辑卷,并将其挂载至特定目录。
增加一个sda5,id为8e,先不要格式化。
# fdisk /dev/sda
n
e

+4G
n

+2G
t
5
8e
p
w
# partprobe /dev/sda
# pvcreate /dev/sda5
# vgcreate myvg /dev/sda5
# lvcreate -L 2G -n mysql myvg
# mke2fs -j /dev/myvg/mysql
# mkdir /mydata/data -pv
# mount /dev/myvg/mysql /mydata

这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。
(2).新建用户以安全方式运行进程:
# groupadd -r mysql
# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
# chown -R mysql:mysql /mydata/data

(3).安装并初始化mysql-5.5.20
# tar xf mysql-5.5.20-linux2.6-i686.tar.gz  -C /usr/local
# cd /usr/local/
# ln -sv mysql-5.5.20-linux2.6-i686  mysql
# cd mysql
# chown -R mysql:mysql  .
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
# chown -R root  .

(4).为mysql提供主配置文件:
# cd /usr/local/mysql
# cp support-files/my-large.cnf  /etc/my.cnf

并修改此文件中thread_concurrency的值为你的CPU个数乘以2(由于只有一颗CPU,所以这里thread_concurrency = 2),另外还需要添加如下行指定mysql数据文件的存放位置:
thread_concurrency = 2
datadir = /mydata/data
(5).为mysql提供sysv服务脚本,并添加mysqld至服务列表,而后启动服务测试。
# cd /usr/local/mysql
# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on
# service mysqld start

为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:
(6).输出mysql的man手册至man命令的查找路径:
编辑/etc/man.config,添加如下行即可:
MANPATH /usr/local/mysql/man
(7).输出mysql的头文件至系统头文件路径/usr/include:
这可以通过简单的创建链接实现:
# ln -sv /usr/local/mysql/include  /usr/include/mysql

(8)输出mysql的库文件给系统库查找路径, 而后让系统重新载入系统库:
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
# ldconfig -v

(9).修改PATH环境变量(直接在/etc/profile文件里添加“PATH=$PATH:/usr/local/mysql/bin”即可),让系统可以直接使用mysql的相关命令:
# vim /etc/profile
PATH=$PATH:/usr/local/mysql/bin
# source /etc/profile

2.在172.16.22.3主机上安装mysql-5.5.22
(1) .新建用户以安全方式运行进程:
# groupadd -r mysql
# useradd -g mysql -r -s /sbin/nologin -M mysql

(2).安装并初始化mysql-5.5.22
# tar xvf mysql-5.5.22-linux2.6-i686.tar.gz  -C /usr/local
# cd /usr/local/
# ln -sv mysql-5.5.22-linux2.6-i686  mysql
# cd mysql
# chown -R mysql:mysql  .
# scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
# chown -R root  .

(3).为mysql提供主配置文件:
# cd /usr/local/mysql
# cp support-files/my-large.cnf  /etc/my.cnf

并修改此文件中thread_concurrency的值为你的CPU个数乘以2(由于只有一颗CPU,所以这里thread_concurrency = 2),另外还需要添加如下行指定mysql数据文件的存放位置:
thread_concurrency = 2
datadir = /usr/local/mysql/data
(4).为mysql提供sysv服务脚本,并添加mysqld至服务列表,而后启动服务测试。
# cd /usr/local/mysql
# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on
# service mysqld start

为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:
(5).输出mysql的man手册至man命令的查找路径:
编辑/etc/man.config,添加如下行即可:
MANPATH /usr/local/mysql/man
(6).输出mysql的头文件至系统头文件路径/usr/include:
这可以通过简单的创建链接实现:
# ln -sv /usr/local/mysql/include  /usr/include/mysql

(7)输出mysql的库文件给系统库查找路径, 而后让系统重新载入系统库:
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
# ldconfig -v

(8).修改PATH环境变量(直接在/etc/profile文件里添加“PATH=$PATH:/usr/local/mysql/bin”即可),让系统可以直接使用mysql的相关命令:
# vim /etc/profile
PATH=$PATH:/usr/local/mysql/bin
# source /etc/profile

二、配置主从服务器
1.配置主服务器(172.16.22.1):
(1).查看/etc/my.cnf配置文件中是否启动二进制日志:
log-bin=mysql-bin (默认情况下都已经开启,此时不需要做修改)
(2).建立复制权限用户:
# mysql
mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO lh@’172.16.22.%’ IDENTIFIED BY ‘123456’;
mysql> SHOW GRANTS FOR lh@’172.16.22.%’;

2.配置从服务器(172.16.22.3):
(1).编辑/etc/my.cnf配置文件,更改server-id使它和主服务器的server-id不一样,关闭二进制日志并打开中继日志,不允许从服务器写操作:
# vim /etc/my.cnf
找到server-id,并改为
server-id = 11
找到 log-bin=mysql-bin 并禁用此项(在前面加上“#”即可)
在“#log-bin=mysql-bin”下面增加2项:
relay-log = relay-bin
relay-log-index = relay-bin.index
在[mysqld]段增加如下一项,不允许从服务器写操作:
read_only=1
(2).在从服务器上指定主服务器:
# mysql
mysql> FLUSH TABLES WITH READ LOCK;
mysql> CHANGE MASTER TO
-> MASTER_HOST=’172.16.22.1’,
-> MASTER_USER=’lh’,
-> MASTER_PASSWORD=’123456’;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G





如果看到方框内的两项都为‘yes’的话,说明你的从服务器已经正常启动了。
三、对主从服务器进行测试
在172.16.22.1上执行如下操作:
# mysql
mysql> show databases;





在172.16.22.3执行如下操作:
# mysql
mysql> show databases;





此时可以看到主从服务器的数据库都是四个。
现在我们在主服务器上创建一个数据库testdb和表test,看从服务器上是否也有呢?
在172.16.22.1上执行如下操作:
# mysql
mysql> create database testdb;
mysql> use testdb;
mysql> create table test (
-> Name varchar(30) not null,
-> Age char(3) not null );

在172.16.22.3上查看是否有testdb数据库以及test1表:
# mysql
mysql> SHOW DATABASES;





# mysql
mysql> show tables;
mysq> desc test;





此时发现在172.16.22.3上有testdb数据库和test表,说明mysql服务器复制的主从架构实现了。本文出自 “linux技术” 博客,请务必保留此出处http://lihuan.blog.51cto.com/4391550/830953
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: