mysql 的主从复制

1、mysql主从复制介绍

        mysql 服务器之间的复制是基于二进制日志机制的。在主服务器上开启二进制日志,当mysql实例进行写操作时会同时生成一条操作事件日志并写入二进制日志文件中,而从服务器则负责读取主服务器上的二进制日志,并在从服务器上重新执行该事件,从而实现复制数据。 

       从库生成两个线程,一个I/O线程,一个SQL线程;I/O线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

        

 

 

 

2、主从形式

3、 主从复制实战

环境:  centos 6.5  192.168.2.11(主)

          centos 6.5  192.168.2.22(从)

 

1、配置yum源(两台机器都一样)

[root@mysql01 yum.repos.d]# mount /dev/sr0 /mnt

mount: block device /dev/sr0 is write-protected, mounting read-only

      

 

2、关闭iptables

[root@mysql01 yum.repos.d]# service iptables stop

[root@mysql01 yum.repos.d]# chkconfig iptables off

 

3、在两台机器安装mysql(一样的操作)

[root@mysql01 yum.repos.d]# yum install -y mysql mysql-server

[root@mysql01 yum.repos.d]# service mysqld start

[root@mysql01 yum.repos.d]# chkconfig mysqld on

[root@mysql01 yum.repos.d]# mysqladmin -uroot password '00000000'

 

4、在mysql01上创建数据库test01,并在上面创建student表

[root@mysql01 yum.repos.d]# mysql -uroot -p

mysql> create database test01;

mysql> use test01;

mysql> create table student(name varchar(10),id int(4));

mysql> insert into student(name,id)values('long01',1);

mysql> insert into student(name,id)values('long02',2);

mysql> exit

 

5、在mysql01编辑my.cnf文件

[root@mysql01 yum.repos.d]# vi /etc/my.cnf

[mysqld]

log-bin=long-bin

#启用二进制日志

server-id=101

#设置服务器编号,不能重复

binlog-do-db=test01,test02

#binlog-ignore-db=test01,test02

#这两个参数分别的作用是需要复制的库和定义不需要复制的库,用其一即可

[root@mysql01 yum.repos.d]# service mysqld restart

 

6、在mysql02设置服务器编号(不能和mysql01一样)

[root@mysql02 ~]# vi /etc/my.cnf

[mysqld]

server-id=102

binlog-do-db=test01,test02

#binlog-ignore-db=test01

[root@mysql01 yum.repos.d]# service mysqld restart

 

7、在mysql01上创建复制账号

[root@mysql01 yum.repos.d]# mysql -uroot -p

mysql> create user 'slave_cp'@'%' identified by '00000000';

mysql> grant replication slave on *.* to 'slave_cp'@'%';

mysql> exit

 

8、获取mysql01二进制日志信息

[root@mysql01 yum.repos.d]# mysql -uroot -p

mysql> flush tables with read lock;

#锁定数据库的写操作,作用是对所用的表执行只读锁定,写的操作会被拒绝,防止在查看二进制日志时有人对数据进行修改

mysql> show master status;

     

mysql> unlock tables;

#对全局锁执行结束操作

mysql> exit

 

9、对mysql01现有的数据库进行备份,并导入mysql02

[root@mysql01 yum.repos.d]# mysqldump -uroot -p00000000 test01 >/tmp/long.sql

[root@mysql01 yum.repos.d]# scp /tmp/long.sql 192.168.2.22:/tmp/

[root@mysql02 ~]# mysql -uroot -p

mysql> create database test01;

[root@mysql02 ~]# mysql -uroot -p00000000 test01 </tmp/long.sql

 

10、配置从服务器mysql02连接主服务器mysql01进行数据复制

[root@mysql02 ~]# mysql -uroot -p

mysql> change master to

 -> master_host='192.168.2.11',

 -> master_user='slave_cp',

 -> master_password='00000000',

 -> master_log_file='long-bin.000001',

 ->master_log_pos=339;

mysql> start slave;

mysql> show slave status\G;

     

 

 

11、数据同步验证(在mysql01上创建新的数据库和在数据库test01上的表student加入新的数据)

[root@mysql01 yum.repos.d]# mysql -uroot -p

mysql> create database test02;

mysql> use test01;

mysql> insert into student values('long03',3);

     

[root@mysql02 ~]# mysql -uroot -p

mysql> show databases;

      

mysql> select * from student;

      

注意:slave上写了数据,主从复制会被破坏。重启master,得先关闭slave(slave stop)

,然后重启master 的mysql 服务,slave 也重新start slave。

 

猜你喜欢

转载自www.cnblogs.com/derrickrose/p/9416900.html