`
lesorb
  • 浏览: 121407 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql之replication配置

阅读更多
在MySQL 3.23.15版本之后,MySQL提供了数据库复制的功能,可以实现两个数据库实时同步,增强了MySQL数据库的稳定性,而且可以在企业级应用的数据库层实现Cluster…

MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器(Master),而一个或多个其它服务器充当从服务器(Slave),利用该特性实现读写分离,是很多大型网站常用的数据库架构。MySQL的replication的配置相对于Oracle来说,要简单的多。本文演示了在同一台windows机器中配置单向异步复制的过程。这里的Replication是异步复制。MySQL的同步复制是MySQL Cluster中的一个特性。

要启用复制特性,MySQL必须使用二进制日志。关于二进制日志的特性,请参考官方手册(5.0,5.1,6.0)。

本例中MySQL的版本:

mysql> select version();
+————————-+
| version() |
+————————-+
| 5.0.37-community-nt-log |
+————————-+
1 row in set (0.00 sec)


主库配置文件my.ini

port=3306
datadir=”D:/Program Files/MySQL/MySQL Server 5.0/Data/”

server-id=1
log-bin=mysql-bin.log
从库配置文件my2.ini

在master上,其实不需要做什么设置,只需要打开log-bin,写上server-id=1,写上要备份的数据库,则自动是master模式,于是问题主要集中在slave上.那么slave上是如何工作的呢?
Slave上Mysql的Replication工作有两个线程,I/O thread和SQL thread,I/O 的作用是从master 3306端口上把它的binlog取过来(master在被修改了任何内容之后,就会把修改了什么写到自己的binlog等待slave更新),然后写到本地的relay-log,而SQL thread则是去读本地的relay-log,再把它转换成本Mysql所能理解的东西,于是同步就这样一步一步的完成.决定I/O thread的是/var/lib/mysql/master.info,而决定SQL thread的是/var/lib/mysql/relay-log.info.
请注意,因为上边提到了binlog里的内容是改了什么东东,而不是改了以后是什么东东,所以在进行同步之前必须保证两个数据库是完全相同的,不然可能出错.打个比方来说.A机上有一个表里的元组为2,而操作是减一,则binlog只会记录减一这个操作,如果B机上没有,那么则无法得到同步,因为B机没有这个字段,就不知道减一是什么操作.
对于故障诊断,我的方法是都在slave(master/slave是相对的)的mysql(指客户端)里完成:
方法一:show slave status;
方法二:show processlist;
方法三:show master status;
方法四   查看错误日志
   在D:/Program Files/MySQL/MySQL Server 5.0/(win)或(linux)/var/lib/mysql(mysql安装目录)下有个hostname.err文件,所有的错误都在其中被记录,如下所示:

port=3307
datadir=”D:/Program Files/MySQL/MySQL Server 5.0/Data2/”

server-id=2

#启用从库日志,这样可以进行链式复制
log-slave-updates

#从库是否只读,0表示可读写,1表示只读
read-only=1

#只复制某个表
replicate-do-table=tablename

#只复制某些表(可用匹配符)
replicate-wild-do-table=tablename%

#只复制某个库
replicate-do-db=dbname

#只复制某些库
replicte-wild-do-db=dbname%

#不复制某个表
replicate-ignore-table=tablename

#不复制某些表
replicate-wild-ignore-table=tablename%

#不复制某个库
replicate-ignore-db=dbname

#复制完的sql语句是否立即从中继日志中清除,1表示立即清除
relay-log-purge=1

#从服务器主机,用于show slave hosts生成从库清单
report-host=hostname
启动主库

mysqld-nt –defaults-file=my.ini

连接到主库中,创建复制用户

D:\>mysql -uroot -ppassword -P3306
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.0.37-community-nt-log MySQL Community Edition (GPL)

mysql> grant replication slave on *.* to ‘rep’@'localhost’ identified by ‘rep’;
Query OK, 0 rows affected (0.00 sec)
锁住主库的table,以便备份数据文件到从库进行初始化

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)

显示主库状态,注意记下当前二进制日志文件名和position

mysql> show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000002 | 228 | | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)

将D:/Program Files/MySQL/MySQL Server 5.0/Data/下的内容打包复制到D:/Program Files/MySQL/MySQL Server 5.0/Data2/下,执行从库的初始化。当然,初始化也可以使用mysqldump来完成。

另外开启一个cmd,启动从库

mysqld-nt –defaults-file=my2.ini

连接到从库进行配置

D:\>mysql -uroot -ppassword -P3307
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.37-community-nt-log MySQL Community Edition (GPL)

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> CHANGE MASTER TO
-> MASTER_HOST=’localhost’,
-> MASTER_USER=’rep’,
-> MASTER_PASSWORD=’rep’,
-> MASTER_LOG_FILE=’mysql-bin.000002′,
-> MASTER_LOG_POS=228;
Query OK, 0 rows affected (0.01 sec)
注意到这里master_log_file和master_log_pos就是前面show master status的结果。

启动复制进程

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

至此配置基本完成,在主库解开table的锁定

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

创建测试table,插入数据

mysql> use test
Database changed

mysql> create table testrep(i int);
Query OK, 0 rows affected (0.05 sec)

mysql> insert into testrep values(1);
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)
然后再到从库查询

mysql> select * from testrep;
+——+
| i |
+——+
| 1 |
+——+
1 row in set (0.00 sec)

可见数据已经从主库复制到从库。

在从库的数据目录下,有几个和复制相关的文件需要说明一下:
*-reloay-bin.* 从主库同步过来的Bin log文件,也叫中继日志
master.info 主库帐号信息和同步信息,这里记录了复制用户名和密码,需要保护好权限。
relay-log.info 跟踪执行同步过来的Bin log的执行情况

通过show processlist可以查看主从库用于复制的相关进程(在windows上实际实现为线程)的信息
主库:

mysql> show processlist\G
*************************** 1. row ***************************
Id: 1
User: root
Host: localhost:3736
db: test
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 2. row ***************************
Id: 2
User: rep
Host: localhost:3745
db: NULL
Command: Binlog Dump
Time: 68
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
2 rows in set (0.00 sec)

可以看到Id为2的进程是用于复制的进程,state可用于监控复制的状态,具体含义参考官方文档。

从库:

mysql> show processlist\G
*************************** 1. row ***************************
Id: 1
User: root
Host: localhost:3741
db: test
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 2. row ***************************
Id: 2
User: system user
Host:
db: NULL
Command: Connect
Time: 88
State: Waiting for master to send event
Info: NULL
*************************** 3. row ***************************
Id: 3
User: system user
Host:
db: NULL
Command: Connect
Time: 51
State: Has read all relay log; waiting for the slave I/O thread to update it
Info: NULL
3 rows in set (0.00 sec)

可以看到从库启动了两个复制进程,一个用于和主库交互,取得日志,另外一个则用于应用日志到从库。MySQL的复制主要是通过解析主库的二进制日志,然后再在从库应用来实现的。这种方式和Oracle Streams的本质思想是一致的。通过MySQL自带的工具mysqlbinlog,可以dump出二进制日志中的具体内容,实际上就是一条条的sql语句:

D:\Program Files\MySQL\MySQL Server 5.0\data>mysqlbinlog mysql-bin.000002

分享到:
评论

相关推荐

    mysql-replication配置文档

    详细描述mysql-replication配置,mysql主从库切换,验证等

    Ubuntu上MySQL的Replication配置

    胖子摸索出来的,Ubuntu上MySQL的Replication配置,的简单记录步骤

    MySQL的Replication配置[定义].pdf

    MySQL的Replication配置[定义].pdf

    Mysql 5.7 基于组复制(MySQL Group Replication) - 精华版

    本篇文章详细介绍了Mysql 5.7 基于组复制(MySQL Group Replication)的配置说明,实为线上操作手册,在此分享,希望能帮助到有用到的朋友~

    MySQL的Replication配置方案.doc

    1.Replication可以实现数据将一台主服务器的数据复制到多台从服务器的操作 2.默认情况下,属于异步复制,无需持久的链接 3.通过配置,可以复制特定的表和数据库,也可以指定不复制的数据库 4.将master数据库...

    mysql_replication

    mysql介绍-安装-配置,希望多大家有帮助,谢谢!

    Mysql Replication 具有HA.pdf

    Mysql Replication HA 配置

    完整精品数据库课件 MySQL从入门到精通 第18章 MySQL Replication(共27页).ppt

    【完整课件如下】MySQL从入门到精通 第01章 初始MySQL(共19页).pptMySQL从入门到精通 第02章 MySQL的安装与配置(共14页).pptMySQL从入门到精通 第03章 数据库的基本操作(共11页).pptMySQL从入门到精通 第04章 ...

    mysql-replication-ansible

    mysql-replication-ansible 要求 流浪者 1.5+ Ansible 用法 设置 克隆这个存储库。 $ git clone https://github.com/akagisho/mysql-replication-ansible.git $ cd mysql-replication-ansible 执行 使用 ansible ...

    MGRMySQL Group Replication学习笔记.pdf

    MySQL Group Replication详细配置指南,所有命令都在真实环境当中做过复制出来的,文档总共17页。

    mysql5.7 主从配置docker配置文件

    该配置文件可以直接放置到目录下,使用docker-compose up -d启动使用。 其中server_id=XX不能重复 在master中执行: grant replication slave,replication client on *.* to 'user1'@'%' identified by '1'; ...

    mysql replication 配置(主从复制读写分离)

    此文档包括怎样在liunx下搭建主从重复读写分离的全过程,及其中遇到问题及处理方法。完善搭建mysql数据库集群。

    MySQL5.6 Replication主从复制(读写分离) 配置完整版

    MySQL5.6主从复制(读写分离)教程 1、MySQL5.6开始主从复制有两种方式: ...2、MySQL官方提供的MySQL Replication教程: http://dev.mysql.com/doc/refman/5.6/en/replication.html 第一步:准备工作 主服务器:

    MySQL-group-replication 配置步骤(推荐)

    下面小编就为大家带来一篇MySQL-group-replication 配置步骤(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    mysql主从同步配置.docx

    mysql主从同步配置,要实现 MySQL 的 Replication ,首先必须打开 Master 端的Binary log(mysql-bin.xxxxxx)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全按顺序的...

    MySQL Replication(复制)用MySQL5.5提高可扩展性和可用性_5.5

    MySQL Replication(复制)已经在一些著名的网站和企业广泛应用以将数据库的扩展性提升到极限水平。对用户而言可以简单快速地为数据库创建多个副本,超越单个数据库实例容量的限制,弹性扩展数据库系统以满足快速增长...

    MySQL-Router 8.0安装与配置.docx

    本文详细描述了MySQL Replication(1主2从)搭配MySQL-Router(8.0)中间件实现高可用方案,主要描述MySQL-Router中间件的安装与配置步骤,保证一次成功。

    MYSQL学习资料

    MySQL5 5 Semi synchronous Replication(半同步复制) mysqlslap MySQL压力测试工具 mysql proxy安装配置 mysql 触发器 mysql与MongoDB语法对比 mysql分表的3种方法 MySQL数据库扩展小记 mysql架构方案 MySQL水平...

    MySQL主从配置完整步骤资料

    MySQL主从配置完整步骤资料 MySQL主从配置是指将一个MySQL数据库服务器设置为主服务器,另一个服务器设置为从服务器,实现数据的实时同步。主从配置可以提高数据库的可用性和读取性能。本文将详细介绍MySQL主从配置...

    Effective MySQL之备份与恢复.pdf

    主要内容理解不同备份策略如何影响锁定和系统可用性了解静态备份选项和时间点要求的重要性体会使用MySQL replication实现不同备份策略的优势了解云计算中MySQL方案的好处与风险确定对优数据保护需求具有决定性影响的...

Global site tag (gtag.js) - Google Analytics