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主从配置
主配置(安装完mysql的虚拟机)
基础配置:
修改my.cnf,增加server-id=130和log_bin=linux1
# vi /etc/my.cnf
编辑配置文件
重启mysqld服务
# /etc/init.d/mysqld restart
备份mysql库(加入环境变量)
# mysqldump -uroot mysql > /tmp/mysql.sql
# export PATH=$PATH:/usr/local/mysql/bin/
创建一个库保存数据
# mysql -uroot -e "create database lfb"
# mysql -uroot lfb < /tmp/mysql.sql
将mysql库恢复成新建的库,作为测试数据
数据库配置
进入数据库(没有密码)
# mysql -uroot
创建用作同步数据的用户并赋予权限
mysql> grant replication slave on *.* to 'repl'@192.168.131.40 identified by 'password';
将表锁住,保持表内数据不变
mysql> flush tables with read lock;
显示主机状态
mysql> show master status;
3.2从配置(安装完mysql的虚拟机)
基础配置
编辑配置文件
# vi /etc/my.cnf
重启mysqld服务
# /etc/init.d/mysqld restart
在主上将文件拷贝到从上,并在从上查看文件大小是否一致
# scp /tmp/mysql.sql root@192.168.131.40:/tmp/
创建一个和主一样的库
# mysql -uroot -e "create database lfb"
将文件内容导入库
# mysql -uroot lfb < /tmp/mysql.sql
数据库配置
进入数据库(没有密码)
# mysql -uroot
mysql> stop slave;
mysql> mysql> change master to master_host='192.168.131.30',master_user='repl',master_password='password',master_log_file='linux1.0000001’,master_log_pos=645213;
mysql> start slave;
在主上执行解锁表
mysql> unlock tables;
任务4. 主从同步及相关配置参数
主从同步验证:
从服务器上操作并执行命令(防火墙关闭):
mysql> show slave status\G
若出现Yes,如上图状态,即表示主从配置正常。
其中,主服务器主要配置参数如下:
从服务器主要配置参数如下:
任务5.测试主从
5.1主服务器上
在主上进入数据库
# mysql -uroot
mysql> use lfb;
mysql> select count(*) from db;
mysql> truncate table db;
5.2从服务器上
在从上进入数据库
# mysql -uroot lfb
mysql> select count(*) from db;