MySQL--主从复制

目录

1.理解MySQL主从复制原理。

2.完成MySQL主从复制。


1.理解MySQL主从复制原理。

1.主要基于MySQL二进制日志

2.主要包括三个线程(2个I/O线程,1个SQL线程)

MySQL--主从复制_第1张图片

 概括:

1、MySQL将数据变化记录到二进制日志中;
2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中;
3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库

 详细步骤:

1.【连接】

1、从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user、password、port、ip),并且让从库知道,二进制日志的起点位置(file名,position号):start slave
2、从库的IO线程和主库的dump线程建立连接。

 

2.【传输】

3、从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求。
4、主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程。

 

3.【应用】

5、从库IO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到
master.info中
6、从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的relay会自动被清理purge

2.完成MySQL主从复制。

环境准备:两台机器一主一从。
主库(MySQL Master):[ip为192.168.111.30 port为3306]
从库(MySQL Slave ):[ip为192.168.111.40 port为3306和3307]

0.首先做时间同步(两台主机上同时进行)
[root@mysql3 ~]# yum whatprovides ntpdate#看命令是属于哪个软件包
[root@mysql3 ~]# yum install ntp-4.2.6p5-29.el7.centos.2.x86_64
[root@mysql3 ~]# ntpdate ntp1.aliyun.com

主库配置:
1)设置server-id值并开启binlog参数
[mysqld]
log_bin = mysql1-bin
server_id = 30
重启数据库。之前已经设置过的话,就不需要修改了
2)建立同步账号
mysql> grant replication slave on *.* to 'rep'@'192.168.111.%' identified by 'redhat';
mysql> show grants for 'rep'@'192.168.111.%';        # 查看授权账号
3)锁表设置只读。原因是为后面备份准备,注意生产环境要提前申请停机时间;
mysql> flush tables with read lock;
提示:如果超过设置时间不操作会自动解锁。
mysql> show variables like '%timeout%';                # 查看超时时间
测试锁表后是否可以创建数据库:
4)查看主库状态
查看主库状态,即当前日志文件名和二进制日志偏移量
mysql> show master status;
+-------------------+----------+--------------+------------------+----------------------------------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                            |
+-------------------+----------+--------------+------------------+----------------------------------------------+
| mysql1-bin.000013 |      488 |              |                  | 040934de-f7f3-11ed-887d-000c29f42778:1-62292 |
+-------------------+----------+--------------+------------------+----------------------------------------------+
1 row in set (0.00 sec)
5)备份数据库数据
[root@mysql1 ~]# mysqldump -uroot -predhat -A -B | gzip > /backup/mysql/all.sql.gz
6)解锁
mysql> unlock tables;
7)主库备份数据上传到从库
[root@mysql1 ~]# scp /backup/mysql/all.sql.gz 192.168.111.40:/opt/

从库配置:
从库上设置
1)设置server-id值并关闭binlog参数
#log_bin = /data/mysql/data/mysql-bin
server_id = 130
重启数据库:
2)还原从主库备份的数据,前提是保证数据库为开启状态
[root@mysql2 ~]# zcat /opt/all.sql.gz | mysql -uroot -predhat -S /mysql/3306/mysql.sock
[root@mysql2 ~]# zcat /opt/all.sql.gz | mysql -uroot -predhat -S /mysql/3307/mysql.sock
检查还原:
[root@mysql2 ~]# mysql -uroot -predhat -S /mysql/3306/mysql.sock -e 'show databases'
[root@mysql2 ~]# mysql -uroot -predhat -S /mysql/3307/mysql.sock -e 'show databases'
3)设定从主库同步(3306端口数据库和3307端口书库同时进行)
mysql> change master to
    -> master_host='192.168.111.30',
    -> master_port=3306,
    -> master_user='rep',
    -> master_password='redhat',
    -> master_log_file='mysql1-bin.000013',
    -> master_log_pos=488;
4)启动从库同步开关
mysql> start slave;
检查状态:
mysql> show slave status\G
5)测试主从同步

1.在主库上插入数据,看从库上有没有同步过来,

2.在主库上删除数据,看从库上有没有同步过来。

你可能感兴趣的:(数据库,mysql,数据库)