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

Mysql主从服务器的构架

2011-12-20 14:53 274 查看
主从服务器配置的原理

Mysql的Replication是一个异步的复制过程,从一个Master服务器上复制到另一个slave服务器上。在主与从之间的实现整个过程主要有三个线程来完成,其中两个线程(SQL线程和IO线程)在从服务器上,另一个IO线程在主服务器上。

要实现Mysql的Replication,首先必须打开主服务器的Binarylog功能,否则无法实现,因为整个复制过程实现。因为整个复制过程实际上就是从服务器从主服务器上获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。打开MysqlR Binary Log可以通过在启动Mysql Server的过程中的Mysqld参数组增加“log-bin"参数项。

MySQL复制的基本过程如下:

1、从服务器上面的IO线程连接主服务器上,并请求从指定日志文件的指定位置之后的日志内容

2、Master接收到来自Slave的IO线程的请求后,通过负责复制的IO线程是根据请求信息读取指定日志指定位置之后的日志信息,返回给从服务器的IO线程。返回信息中除了日志所包含的信息外,还包括本次返回的信息在主服务器上Binary Log文件的名称以及在BinaryLog中的位置

3、从服务器的IO线程接收到信息后,将接收到的日志内容依次写入到从服务器的RelayLog文件的最末端,并将读取到的主服务器端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的高速从主服务器哪个位置开始往后的日志内容读取

4、从服务器的SQL线程检测到RelayLog中新增加了内容后,会马上解析该Log文件中的内容成为在主服务器真实执行时候的那些可执行的Query语句,并在自身执行这些Query。这样,实际就是在主服务器和从服务器执行同样的Query,所以两端的数据是完全一样的。

二、MySQL主从配置的优点

1、解决web应用系统,数据库出现的性能瓶颈,采用数据库集群的方式来实现查询负载;一个系统中数据库的查询操作比更新操作要多得多,通过多台查询服务器将数据库的查询分担到不同的查询服务器上从而提高查询效率。

2、MySQL数据库支持数据库的主从复制功能,使用主数据库进行数据的插入、删除与更新操作,而从数据库则专门用来进行数据查询操作,这样可以将更新操作和查询操作分担到不同的数据库上,从而提高了查询效率。

说明:主服务器是172.16.6.1,在主服务器运行一段时间的时候才开始建从服务器,因此主服务器要做一次备份,从服务器要导入。

主服务器的配置:172.16.6.1

1、安装mysql,并启动

下载mysql-5.5.15-linux2.6-i686.tar.gz

tar xf mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local解压并保存到/usr/local

cd /usr/local

ls 文件名太长创建软连接

ln -sv mysql-5.5.15-linux2.6-i686 mysql

groupadd mysql 要想使用mysql必须创建mysql组和用户

useradd -g mysql -s /sbin/nologin -M mysql

-M不指定家目录

id mysql

cd mysql

ls

chown -R mysql:mysql . mysql目录属主属组为mysql

ll 查看

fdisk /dev/sda

n 创建分区

t 改变类型为8e

创建逻辑卷

partprobe /dev/sda

pvcreate /dev/sda5

vgcreate myvg /dev/sda5

lvcreate -L 3G -n mydata myvg

lvs 查看

mke2fs -j -L MYDATA -b 2048 /dev/myvg/mydata创建文件系统格式化

mkdir /mydata

vim /etc/fstab

LABEL=MYDATA /mydata ext3 default 0 0 开机自动挂载

mount -a挂载

mkdir /mydata/data创建目录用来存放数据

chown -R mysql:mysql /mydata/data改变属主属组以mysql用户运行

ll /mydata/data查看一下

scripts/mysql_install_db --user=mysql --datadir=/mydata/data数据初始化

chown -R root .把属主改为root

cd support-files/ | ls mysql的配置文件

cp my-large.cnf /etc/my.cnf添加主配置文件

vim /etc/my.cnf

datadir = /mydata/data添加数据的目录

cp mysql.server /etc/init.d/mysqld控制mysql服务启动的脚本

service mysqld start验证启动

chkconfig --add mysqld添加开机自动启动

chkconfig --list mysqld

netstat -tnlp监听在3306端口

vim /etc/profile

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

. /etc/profile重读文件

echo $PATH查看一下

mysql 连接mysql

cd ..切换到子目录

ls

ln -sv /usr/local/mysql/include /usr/include/mysql为头文件创建软连接

ls /usr/include/mysql/

vim /etc/ld.so.conf.d/mysql.conf

/usr/local/mysql/lib配置库文件路径

ldconfig -v重新装载

ls man/

vim /etc/man.config

MANPATH /usr/local/mysql/man添加man文档的路径

man mysqld测试一下

2、修改配置文件

vim /etc/my.cnf

log-bin=mysql-bin打开二进制日志

server-id = 1

3、创建用户帐号,注意权限

mysql> grant replication client,replication slave on *.* to 'back'@'172.16.%.%' identified by 'redhat';

mysql> flush privileges;

4、做备份

mysql> flush tables with read lock;

mysql> show master status;查看log,Pos文件对应的位置

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000002 | 190 | | |

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

mysqldump --all-databases --single-transaction --master-data=2 > /all.sql

mysql> unlock tables;

从服务器的配置:

1、安装mysql,并启动

2、修改配置文件

vim /etc/my.cnf

#log-bin=mysql-bin关闭二进制日志

relay_log=relay-log启动中继日志

server-id = 2

read_only = ON从服务器不能写

3、scp 172.16.6.1:/all.sql ./

mysql < all.sql

mysql <show databases;验证是否复制过来

4、mysql -uroot -predhat

less all.sql查看得到log的文件及pos文件或在服务启动之前show master status\G;

mysql> change master to master_user='back',master_host='172.16.6.1',master_password='redhat',master_log_file='mysql-bin.000002 ',master_log_pos=190;

5、启动从服务器

mysql> start slave;

mysql> show slave status\G;

6、查看从服务器是否有错误

cd /mydata/data/

tail 主机名.err查看错误日志

6、在主服务器创建一个数据库,在从服务器验证。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息