主从服务器配置的原理
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、在主服务器创建一个数据库,在从服务器验证。