mysql主从复制binlog_mysql基于binlog日志主从复制的搭建

mysql主从复制原理 binlog

mysql主从复制依赖于mysql二进制日志文件,主mysql服务器会生成二进制日志文件,传递给从服务器执行

mysql从库同步有两个进程,一个io进程用来同步binlog,一个sql进程用来执行relaylog里的数据

目前mysql主从架构还是比较常见的,数据的重要性

实验环境

192.168.237.128 主库

192.168.237.129 从库

mysql主库的配置,需要新增二进制日志binlog配置

[mysqld]

bind-address=0.0.0.0

port=3306

datadir=/data/mysql

socket=/data/mysql/mysql.sock

user=mysql

skip-name-resolve

slow_query_log=on

long_query_time=1

slow_query_log_file=/data/mysql/mysql-slow.log

innodb-file-per-table=1

innodb_flush_log_at_trx_commit = 2

log_warnings = 1

connect_timeout = 60

net_read_timeout = 120

performance_schema_max_table_instances = 400

server-id = 1

log-bin=master-bin

log-bin-index = master-bin.index

[mysqld_safe]

log-error=/data/mysql/mysqld.log

pid-file=/data/mysql/mysqld.pid

mysql主服务器binlog配置

server-id #binlog配置需要给mysql服务器设置id用来标识mysql服务器,每个mysql服务器都有不一样的id。从1开始标识

log-bin #开启binlog,mysql主服务器都需要开启

log-bin-index #binlog存放到文件里面,index里面存放着binlog的文件名

最好再配置文件里指定log-bin和log-bin-index,否则默认的时服务器的名称,若服务器名称更改,服务重启之后则log-bin和log-bin-index的名字会随着变换,主从复制会失败。

启动mysql主库

创建数据目录

数据初始化

启动mysql:systemctl start mysql

验证启动

mysql从库新增中继日志relaylog配置

[mysqld]

bind-address=0.0.0.0

port=3306

datadir=/data/mysql

socket=/data/mysql/mysql.sock

user=mysql

skip-name-resolve

slow_query_log=on

long_query_time=1

slow_query_log_file=/data/mysql/mysql-slow.log

innodb-file-per-table=1

innodb_flush_log_at_trx_commit = 2

log_warnings = 1

connect_timeout = 60

net_read_timeout = 120

performance_schema_max_table_instances = 400

server-id = 2

relay-log = relay-log

relay-log-index = relay-log.index

[mysqld_safe]

log-error=/data/mysql/mysqld.log

pid-file=/data/mysql/mysqld.pid

配置说明

server-id #每台mysql服务器的标识需要不一样

relay-log #从库需要开启relay-log,中继日志

relay-log-index #relaylog也放到文件里面,index里存放着relaylog的文件名

启动mysql从库

创建数据目录

数据初始化

启动数据库

登录到数据库验证

mysql -uroot -h 127.0.0.1 -p

两台数据库独立的,但binlog文件已经有,relaylog还没有

ll -h /data/mysql

mysql的binlog说明

主从复制依赖于二进制日志文件,简称为binlog

binlog里面有存放了偏移信息

mysql主库binlog信息查看命令,登录到mysql里

show master logs; #binlog列表查看

show master status; #记录目前的binlog+偏移信息

创建库创建表初始binlog

create database shijiange;

use shijiange;

create table test (id int);

查看binlog的两种方式

show binlog events in 'master-bin.000003';

show binlog events in 'master-bin.000003' limit 2;

show binlog events in 'master-bin.000003' from 120;

show binlog events in 'master-bin.000003' from 120 limit 1;

命令查看binglog日志:

mysqlbinlog master-bin.000003;

增删改查,然后查看binlog

use shijiange;

insert into test values (1); #插入数据

update test set id = 3 where id = 1; #更新数据,有事务的提交

select * from test; #无数据的改变,无需记录binlog

delete from test; #删除数据,事务提交

use mysql;

insert into test values (1); #错误sql不会写入binlog

mysql主库binlog清空,测试教学环境用,线上环境慎用。或者初搭建mysql主从用

reset master; #清空master的binlog日志

show master logs;

mysql主库刷新binlog,一般来说也是测试环境用

flush logs; #增加一个二进制日志

show master logs; #查看binlog日志

show binlog events in 'master-bin.000001'; #记录了下一个binlog的文件名和索引

show binlog events in 'master-bin.000002';

测试数据删除

drop database shijiange;

reset master;

mysql主从复制的配置步骤概述

mysql主库需要给从库复制的权限

从库使用命令去同步主库的数据

mysql主从复制主库的配置

主库需要给从库复制的权限,一般从都有自己的ip,一台从库放开一个ip

mysql主从复制从库的配置

主库服务器的ip

主库服务器的端口

主库服务器的binlog文件名+索引

用户名和密码

主库开放给从库复制的权限,replication slave权限

grant replication slave on . to 'replication'@'192.168.237.129' identified by 'shijiange';

flush privileges;

从库同步之前,实验是先在主库执行

reset master;

从库使用命令去同步主库。主库ip、主库端口、用户名、密码、binlog文件名、索引

change master to

master_host='192.168.237.128',

master_port=3306,

master_user='replication',

master_password='shijiange',

master_log_file='master-bin.000001',

master_log_pos=120;

从库的启动、关闭、状态

start slave; #启动主从同步

stop slave; #关闭主从同步

show slave status\G #查看主从同步的状态,注意以下三个状态

Slave_IO_Running: Yes #io进程,用来传输binlog

Slave_SQL_Running: Yes #sql进程,用来读取执行binlog里的内容

Seconds_Behind_Master: 0 #主从同步的延时为0

show processlist; #查看主从同步的进程

创建库、创建表、增删改查验证同步是否正常,查看binlog日志

create database shijiange;

use shijiange;

create table test( id int );

insert into test values (1);

update test set id = 3 where id = 1;

delete from test;

drop database shijiange;

你可能感兴趣的:(mysql主从复制binlog)