一.主从复制的原理mysql
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线程。this
其复制过程可用一幅图说明:spa
二.主从复制过程实现的过程:线程
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
3.从服务器Mysql的安装与主服务器的安装过程同样,此处过程省略,
安装成功后验证:
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';
2.从服务器:
1)修改配置文件 vim /etc/my.cnf
server-id = 2 (此处server-id必定不能与主服务器的同样)
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
2)
OK,主从复制的全部配置过程完成,
三.实验效果:
在主服务器上新添加一个数据库:mysql>CREATE DATABASE student;
此时查看从服务器:
在主服务器进行数据库的添加,表的添加以及数据的查询等,从服务器均可以进行复制,而且可以进行查询!