一、MySQL主从数据库的介绍
MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的。
MySQL主从是基于binlog的,主上须开启binlog才能进行主从。
主从过程大致有3个步骤:
1)主将更改操作记录到binlog里
2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里中继日志
3)从根据relaylog里面的sql语句按顺序执行
二、MySQL主从数据库原理图
主服务器上有一个log dump线程,用来和从的I/O线程传递binlog;
从服务器上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地。
三、MySQL主从数据库的配置
IP | 主机名/节点 |
---|---|
192.168.94.110 | localhost/主数据库节点 |
192.168.94.111 | localhost/从数据库节点 |
两台虚拟机均需要成功安装MySQL
3.1主数据库节点配置
基础配置
#vi /etc/my.cnf
将#log_bin前面的#去掉改为log_bin=linux
Basedir = /user/local/mysql
Datadir = /data/mysql
Port = 3306
Server_id = 110 (为你的IP地址的最后一个字段)
Socket = /tmp/mysql.sock
之后重启mysqld服务
#/etc/init.d/mysqld restart
备份数据库
#mysqldump -uroot mysql > /tmp/mysql.sql
创建一个库保存数据
#mysql -uroot -e "create database kei"
将mysql库恢复成新建的库,作为测试数据
数据库配置
进入数据库
#mysql -uroot (没有密码)
创建用作同步数据的用户并赋予权限
> grant replication slave on *.* to 'repl' @192.168.94.111 identified by '123456';
将表锁住,保持表内数据不变
> flush tables with read lock;
显示主机状态
> show master status;
3.2从数据库节点配置
基础配置
编辑配置文件
#vi /etc/my.cnf
Basedir = /user/local/mysql
Datadir = /data/mysql
Port = 3306
Server_id = 111 (为你的IP地址的最后一个字段)
Socket = /tmp/mysql.sock
重启mysqld服务
#/etc/init.d/mysqld restart
在主上将文件拷贝到从上,并在从上查看文件大小是否一致(本步骤在主数据库进行)
#scp /tmp/mysql.sql root@192.168.94.111:/tmp/
在从数据库上创建一个与主数据库一样的库
#mysql -uroot -e "create database kei"
将文件内容导入库
#mysql -uroot kei < /tmp/mysql.sql
数据库配置
进入数据库(没有密码)
#mysql -uroot
>change master to master_host='192.168.94.110',master_user='repl',master_password='123456',master_log_file='linux1.000001',master_log_pos=698861;
在主数据库上执行解锁表
四、主从同步及相关配置参数
主从同步验证
从服务器上操作并执行命令(关闭防火墙)
> show slave status\G;
需要观察到两个yes,即可。
五、测试主从数据库
5.1主服务器上
在主服务器上进入数据库
# mysql -uroot
> select count(*) from db;
> truncate table db;
(如果不能执行,则先>use mysql,之后在执行)
5.2从服务器上
在从服务器上进入数据库
# mysql -uroot kei
> select count(*) from db;
观察到该结果即搭建成功。