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

Mysql主从复制原理及配置

2017-09-16 00:16 465 查看
MySQL内建的复制功能是构建大型、高性能应用程序的基础。将MySQL的数据分布到多个系统上去,这种分布式的机制,是通过将MySQL的某一台主机的数据,复制到其他的主机slaves上,并重新执行一边来实现。

复制过程中,一个服务器充当主服务器,而一个或多个其他服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引,以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接到主服务器时,它通知主服务器,从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时发生的任何更新,然后封锁并等待主服务器通知更新。

请注意,当你进行复制时,所有对复制中的表的更新,必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器的表进行的更新之间的冲突。


mysql支持的复制类型:

  (1):基于语句的复制:  在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。  

            一旦发现没法精确复制时,   会自动选着基于行的复制。    

  (2):基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持

  (3):混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。


以下是复制的过程






一、MySQL的安装与配置

具体的安装过程,建议参考我的这一篇文章:http://blog.csdn.net/qq_39591494/article/details/76652279


我的安装过程都是源码包编译安装的,安装路径都在/usr/local/mysql目录中,因此在一台服务器上安装完成以后,可以将整个mysql目录打包,然后传到其它服务器上解包,便可立即使用。


二、mysql主从复制

主服务器:192.168.35.129/24 
       //已经安装mysql,没有任何应用程序

从服务器:192.168.35.130/24 
       //已经安装mysql,没有任何应用程序

1)主服务器上进行配置

首先启动mysql服务

[root@master ~]# systemctl start mysqld

在/etc/my.conf中修改或者增加以下内容



修改完之后保存退出,重启mysql服务。

[root@master ~]# systemctl restart mysqld

2)登录mysql服务器给从服务器授权

mysql> grant replication slave on *.* to  'myslave'@'192.168.35.130' identified by 'pwd123';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

mysql> show master status;

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000005 |      340 |              |                  |

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

1 row in set (0.00 sec)



其中file列显示日志名,position列显示偏移量,这两个值在后面的从服务器的时候需要用到。

3)配置从服务器

1.在/etc/my.conf中修改server-id 记住这里的id不可以和主服务器一样。






修改完之后重启mysql服务。

2.登录mysql服务,配置同步。






mysql> change master to

    -> master_host='192.168.35.129',

    -> master_user='myslave',

    -> master_password='pwd123',

    -> master_port=3306,

    -> master_log_file='mysql-bin.000005',

    -> master_log_pos=340

    -> ;

Query OK, 0 rows affected (0.03 sec)



启动同步。

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

3.查看slave状态,确保以下两个值为YES



如果只有一个YES,说明之前的配置出错了。

4.最后我们来验证主从复制的效果,我们在master上创建一个csdn库










在从服务器上查看有没有复制过来的csdn库,如果有那么mysql主从复制配置完成。






希望对您有所帮助,再见
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: