一.主从复制的原理

MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。

将主服务器的数据拷贝到从服务器的一个途径是使用LOAD DATA FROM MASTER语句。请注意LOAD DATA FROM MASTER目前只在所有表使用MyISAM存储引擎的主服务器上工作。并且,该语句将获得全局读锁定。

MySQL使用3个线程来执行复制功能,其中1个在主服务器上,另两个在从服务器上。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。

主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以识别为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程。

从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。

3个线程是SQL线程,是从服务器创建用于读取中继日志并执行日志中包含的更新。

有多个从服务器的主服务器创建为每个当前连接的从服务器创建一个线程;每个从服务器有自己的I/O SQL线程。

其复制过程可用一幅图说明:

Mysql主从服务器的复制_Mysql

 

 

二.主从复制过程实现的过程:

1.实验环境:master:IP 192.168.0.13   slave: IP 192.168.0.157

           软件包: mysql-5.1.50-linux-i686-glibc23.tar.gz

2.主服务器Mysql的安装

1)安装Mysql:#tar zxvf mysql-5.1.50-linux-i686-glibc23.tar.gz -C /usr/local   (直接解压/usr/local目录下)

#cd /usr/local

# ln -sv mysql-5.1.50-linux-i686-glibc23/  mysql (创建连接)

#cd mysql

2)添加Mysql用户

#groupadd mysql

#useradd -g mysql mysql

3)装载原始授权到数据库:

#chown -R mysql:mysql .

#mkdir /mydata

#chown -R mysql:mysql /mydata

#./scripts/mysql_install_db --datadir=/mydata --user=mysql

#chown -R root .

#cd support-files/

#cp my-large.cnf /etc/my.cnf

4)修改配置文件:vim /etc/my.cnf

在[mysqld]下添加: datadir = /mydata

保存退出

5)#cd .. (回到Mysql目录下)

#bin/mysqld_safe --user=mysql & (启动Mysql)

#cp support-files/mysql.server /etc/init.d/mysqld

#chkconfig --add mysqld

#chkconfig mysqld on

6)修改环境变量:

#vim /etc/profile

添加:

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

#source /etc/profile (

7)验证#mysql 

 

Mysql主从服务器的复制_休闲_02

 

3.从服务器Mysql的安装与主服务器的安装过程一样,此处过程省略,

安装成功后验证:

Mysql主从服务器的复制_休闲_03

4.主从复制的实现:

1.主服务器:

1)修改配置文件:vim /etc/my.cnf

修改添加:log-bin=master-bin

log-bin-index=master-bin.index (索引文件名字)

server-id = 1 

保存退出,重启服务;

2)为从服务器添加授权:mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repl@'192.168.0.%'IDENTIFIED BY '123';  

mysql>FLUSH PRIVILEGES;Mysql主从服务器的复制_Mysql_04

2.从服务器:

1)修改配置文件  vim /etc/my.cnf

server-id       = 2 (此处server-id一定不能与主服务器的一样)

relay-log = relay-bin

relay-log-index = slave-relay-bin.index

2)

Mysql主从服务器的复制_休闲_05

 

Mysql主从服务器的复制_数据库_06

OK,主从复制的所有配置过程完成,

三.实验效果:

在主服务器上新添加一个数据库:mysql>CREATE DATABASE student;

Mysql主从服务器的复制_休闲_07

此时查看从服务器:

Mysql主从服务器的复制_职场_08

在主服务器进行数据库的添加,表的添加以及数据的查询等,从服务器都可以进行复制,并且能够进行查询!