MySQL 主从复制----之基础

1 数据库服务器 一主一备,是很常见的备用模型

利用数据库主备模型的好处是:

  从服务器上面 可以做停掉 冷备份
  提供高可用的功能 做一些简单的修复
  异地容灾
  scale out: 分摊负载  (高级特性)
     主负责 写 多个从服务器负责 读
 
2 原理 
包含的日志文件
1 bin-log 记录任何可能改变数据库操作的SQL语句
2 relay-log 中继日志  Slave 从Master得到的日志
 
简单介绍原理就是 通过Master 服务器记录的bin-log日志文件,被发送到 Slave服务器,作为Slave的中继日志(relay-log),Slave服服务器,再将这个日志作为SQL语句重新执行一遍,便改变了数据库内容,写入date中!
 
即: 主服务器的操作,被同步的写入了 Slave服务器,但可能会比主服务器慢。(异步模式下)
 
 
Master 开启一个 dump线程
Slave 开启两个线程一个  IO线程负责log读取,一个SQL线程负责从先log中的SQL语句执行
 
 
3 实验
主Master Server: 192.168.204.5
备Slave  Server:  192.168.204.6
 
 mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz   通用格式二进制包
 
一 、主Master 配置
解压步骤省略......
 
指定数据目录 
/data/mysql  
chown -R mysql.mysql /data/mysql
确定存放日志的文件
mkdir /data/mysql/logs
chown -R mysql.mysql /data/mysql/logs
 
初始化
[root@web1 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
复制配置文件和启动文件
[root@web1 mysql]# cp support-files/my-default.cnf /etc/my.cnf
[root@web1 mysql]# cp support-files/mysql.server /etc/init.d/mysqld 
修改配置文件
vim /etc/my.cnf
datadir = /data/mysql  启动必须的
 
针对Master 服务器的配置
server-id =100  必须唯一
log-bin=/data/mysql/logs/master-bin  肯定要启动bin-log日志功能
log-bin-index=/data/mysql/logs/master-bin.index
 
优化的配置 开启满日志查询

slow_query_log = ON
slow_query_log_file = /data/mysql/logs/master_slow.log

 

 

3、创建一个具有复制权限的用户
REPLICATION SLAVE
REPLICATION CLIENT
 
mysql> grant replication slave on *.* to 'repluser'@'192.168.204.6' identified by 'replpass';

mysql> flush privileges;

 
4 记住当前的binlog file 坐标positon

mysql> flush tables;show master status;
Query OK, 0 rows affected (0.00 sec)

+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master_bin.000003 | 488 | | | |
+-------------------+----------+-

 

二、Slave 服务器配置

1 同上初始化

[root@web2 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

2 修改vim /etc/my.cnf

datadir= /data/mysql

server-id =200
relay_log=relay_log
relay_log_index=relay_log.index

 

注: 由于Slave 只作为从服务器,不提供读写,所以不需要记录binlog 日志,节省资源

3 启动mysql,连接主服务器

/etc/init.d/mysqld start

mysql> change master to
-> master_host= '192.168.204.5', master_port=3306,master_user='repluser',master_password='replpass',master_log_file='master_bin.000003',master_log_pos=488;

 

4 让从服务器启动线程复制

mysql> start slave;

 

5 查看Slave 工作状态

show slave status\G;

 

6 测试

主服务器上

创建一个库

mysql> create database mydb;

查看从服务器上是否更新

show databases;

和查看show slave status\G; 是否一些参数已经改变

 

 

扩展知识点

1 master.info 文件

  从服务器把change master 语句所给出的参数保存在其数据目录中的一个名为master.info 的文件里记录初始复制状态,并随着复制工作的进展而刷新这个文件。

2 如何不让从服务器复制主服务的特定库

  replication-ignore-db=databesename

3 Master 和 Slave 启动了哪些线程 参与复制

   复制线程
    master: dump
    slave: IO_Tread,SQL_Tread
    mysql> START SLAVE; 等于启动这两个线程
IO线程负责与主服务器进行通信,接收来自主服务器的信息,把接收到的数据修改命令写入从服务器的中继日志
SQL线程负责从中继日志读取出数据修改命令并执行
STOP SLAVE 
START SLAVE 后面可以接 {IO_Thread|SQL_Thread}
 
 

 

 

posted @ 2014-11-16 22:31  小小龟侠  阅读(242)  评论(0编辑  收藏  举报