mysql:工作原理
从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致
mysql主从复制用途
实时灾备,用于故障切换
读写分离,提供查询服务
备份,避免影响业务
主从部署必要条件:
主库开启binlog日志(设置log-bin参数)
主从server-id不同
从库服务器能连通主库
Mysql支持的复制类型:
1、 基于语句的复制:在主服务器上执行的sql语句,在从服务器上会执行同样的语句。Mysql默认采用基于语句的复制,效率比较高,但是有时不能实现精准复制。
2、 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
3、 混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的复制不能精准复制时,就会采用基于行的复制。
部署mysql主从:
两台centos7
首先关闭防火墙、关闭 seliunx
systemctl stop firewalld
senetforce 0
yum 安装mariadb
yum -y install mariadb mariadb-server
[root@kafka02 ~]# vim /etc/my.cnf #主配置文件配置二进制文件
server-id=1 #主的ID
log-bin=mysql-bin # 二进制的配置
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema #这三个库不需要同步过去,不然密码该成一样的了
binlog-ignore-db=mysql
重启mysql
systemctl restart mariadb
进入mariadb
mysql
创建远程用户
MariaDB [(none)]> grant all on *.* to 'tom'@'%' identified by '123';
Query OK, 0 rows affected (0.01 sec)
刷新数据库
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
查询二进制位置和文件
MariaDB [(none)]> show master status;
±-----------------±---------±-------------±--------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
±-----------------±---------±-------------±--------------------------------------------+
| mysql-bin.000005 | 444 | | information_schema,performance_schema,mysql |
±-----------------±---------±-------------±--------------------------------------------+