本文主要讲述一下Mysql主从复制之一主一从的实现方法;

   MySQL的复制是mysql数据库内建的功能,是构建基于mysql的大规模、高性能应有物基础,这类应用所谓的"水平扩展"的架构。可以通过为服务器配置为一个或多个备库的方式来进行数据同步。复制功能不仅有利于构建高性能的应用,同是也是高可用性、可扩展性、灾难恢复、备份以及数据仓库等工作的基础。复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。可以实现一台主服务器的数据可以同步到多台从服务器上,其实从服务器本身也是可以被配置成另外一台服务器的主服务器的。主和从之间可以有多种组合方式,应生产环境而定,可选择适合的组合方式;本文主要讲述一下Mysql主从复制之一主一从的实现方法;


主从复制的实现过程;

mysql复制默认为异步的工作模式;

  主服务器binlog dump;将IO thread请求的事件发送给对方;具备读写

  IO thread;向主服务器请求二进制日志中的事件;         只能读


主服务器(Master);172.16.34.30  

从服务器(Slave);172.16.34.31

系统均为:CentOS6.5_64位

在配置主从之前,需要注意一点,就是从服务器数据库版本一定要高于或等于主服务器的版本;


1、Master的配置

打开mysql的主配置文件里添加如下:

vim /etc/my.cf/

mysql主从同步_mysql

2、创建存放二进制日志的目录;
mkdir -pv /mydata/binlogs

chown -R mysql:mysql /mydata/binlogs


3、连接数据库创建复制权限的用户帐号;

mysql -uroot -hlocalhost -predhat
创建一个具有复制权限的用户账号;

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'user'@'172.16.%.%' IDENTIFIED BY 'redhat';

mysql> flush privileges;


1、Slave配置;

打开从服务器的主配置文件;vim /etc/my.cf,添加如下;

mysql主从同步_mysql _02


2、创建存放服务器的中继日志日录;

mkdir -pv /mydata/relaylogs
chown -R mysql:mysql /mydata/relaylogs
[root@mysql ~]# ls /mydata/relaylogs/
[root@mysql ~]# mysql    连接数据库

mysql主从同步_mysql _03

mysql> CHANGE MASTER TO MASTER_HOST='172.16.34.3',MASTER_USER='user',MASTER_PASSWORD='redhat';   开始连接主服务器;
Query OK, 0 rows affected (0.07 sec)


4、连接上之后在主服务器上查看一下线程;

mysql主从同步_mysql _04


3、从服务器连接上查看连接状态信息;
show slave status\G

mysql主从同步_mysql _05

由此图可以看出,从服务器已经与主服务器连接上了;
现在在来看下在/mydata/relaylogs目录下有没有产生文件;

mysql主从同步_mysql _06


5、在主服务器上创建一个新的数据库,后在查看从服务器是否可以同步过去;

mysql主从同步_mysql _07


3、在从服务器查看是否同步过来;

mysql主从同步_mysql _08


4、验证主服务器上创建的新库是否存在;

mysql主从同步_mysql _09


6、在主服务器上插入数据;
mysql> insert into nba values (Name),('bj'),('shanghai'),('xiangkong');
mysql> select * from nba;
+-----------+
| Name      |
+-----------+
| NULL      |
| bj        |
| NULL      |
| shangbai  |
| NULL      |
| xiangkong |
+-----------+


7、主服务器查看日志滚动编号;

mysql主从同步_mysql _10


5、从服务器查看;

mysql主从同步_mysql _11


mysql主从同步_mysql _12




从中间开始复制数据库

在主服务器生成数据文件,让从服务不从头开始复制,锁定位置在主服务器上做备份,让从服务器从中间开始复制

主服务器,如下图;

mysql主从同步_mysql _13

[root@mysql ~]# mysqldump --all-databases --flush-logs --master-data=2 --lock-all-tables > cba.sql

vim cba.sql

spacer.gifmysql主从同步_mysql _15
将备份的数据备份下来,发送至从服务器;

mysql主从同步_mysql _16


从服务器;

mysql> CHANGE MASTER TO MASTER_HOST='172.16.34.2', MASTER_USER='user',MASTER_PASSWORD='redhat',MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=107;
[root@mysql ~]# mysql < cba.sql
mysql> start slave;

mysql主从同步_mysql _17


再在在主服务器新建数据库;

mysql主从同步_mysql _18


从服务器查看;

mysql主从同步_mysql _19


查看主服务器上的库是否同步到从服务器;

mysql主从同步_mysql _20