热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在WindowsAzure上基于CentOS6.3部署MySQL5.6主从式数据库(2)

在第一部分,我们演示了如何在CentOS6.3VM中部署MySQL5.6数据库,并将安装了MySQL数据库的虚拟机制作成映像。在这部分,我们将基于这个映像来搭建主从式数据库集群。基

在第一部分,我们演示了如何在CentOS 6.3 VM中部署MySQL 5.6数据库,并将安装了MySQL数据库的虚拟机制作成映像。在这部分,我们将基于这个映像来搭建主从式数据库集群。

基于VM映像创建VM实例

1)基于映像创建mysql-master VM实例

在Windows Azure管理门户的“虚拟机”页面,点击“新建”按钮,在“我的映像”中选中“centos64-mysql56-image“。


由于创建映像会导致原有的mysql-master VM实例被删除,所以,我们需要再次创建mysql-master VM实例。接下来,按照第一部分所示,再配置好mysql-master VM的云服务、端点等信息,即可创建mysql-master VM实例。注意:mysql-master VM实例一定要记得增添MySQL端点,这个端点定义了3306的公共端口,否则将无法从外部访问MySQL数据库。



2)基于映像创建mysql-slave1 VM实例

仿照前面的步骤,继续创建mysql-slave1 VM实例。创建好后,我们将会得到如下的虚拟机:

当mysql-slave1 VM创建成功后,需要做一件特别的事,清除MySQL服务器的UUID。从MySQL 5.6起,为了支持新的数据复制功能,MySQL服务器会产生UUID,以相互区别。一个集群中的MySQL服务器的UUID不能重复,否则会产生无法预料的后果。对于CentOS 6.3而言,MySQL服务器产生的UUID存储于/var/lib/mysql/auto.cnf文件中。既然slave数据库是基于同一个VM映像创建的,它可能也继承了相同的auto.cnf文件,这会导致UUID冲突。避免UUID冲突的一个简单方法是删除auto.cnf,这样,服务器启动时会重新产生一个UUID。为此,我们需要登录到mysql-slave1 VM中,执行下述命令:

cd /var/lib/mysql

rm auto.cnf


配置MySQL主数据库

1)准备好MySQL配置文件my.cnf

使用PuTTY登录到mysql-master VM中。然后输入下面的命令,检查MySQL的配置文件/etc/mysql/my.cnf是否存在:

cat /etc/mysql/my.cnf

如果该文件不存在,需要执行下述命令查找一份模板配置文件:

rpm -ql MySQL-server

查找/usr/share/mysql/my-default.cnf文件,将它拷贝至/etc/mysql目录下,并将文件名改为my.cnf。

cp /usr/share/mysql/my-default.cnf /etc/mysql/my.cnf


2)编辑my.cnf文件

首先,添加下面一行:

bind-address = 192.168.0.4

它使得mysql数据库绑定在mysql-master VM的内部IP上。VM的内部IP可以在该虚拟机的仪表板中查到。下图显示了mysql-master VM的内部IP:


接下来,需要修改server-id属性。在mysql集群中,每个mysql数据库的server-id都必须是唯一的。我们可以将mysql-master的server-id设为1。

server-id = 1

再下来,修改log_bin属性。MySQL主从数据库的数据同步是通过读取二进制日志文件来实现的。这里要配置的log_bin属性的值代表了master数据库的二进制日志文件。

log_bin = /var/log/mysql/mysql-bin.log

最后,增加binlog_do_db属性,指定需要进行复制的数据库名称。如果有多个数据库要复制,对于每个数据库都需要添加一行binlog_do_db。这里,我们假设要复制的数据库名称是travex。因此,

binlog_do_db = travex


完成上述步骤后,保存并退出编辑器。需要注意的是,mastermysql数据库的二进制日志文件所在的目录可能并不存在,所以我们需要先创建这个目录,并且将目录的owner从root用户变为mysql用户。

mkdir /var/log/mysql

chown -R mysql:mysql /var/log/mysql


3)启动master数据库,并做权限处理

输入下述命令,检查mysql数据库是否已启动:

mysqladmin -uroot -p ping

如果数据库还未启动,输入下述命令启动mysql:

service mysql start

登录到mysql,在数据库命令行界面下输入下述命令,将复制二进制日志文件的权限赋给slave数据库。

mysql –uroot -p

GRANT REPLICATION SLAVE ON *.* TO 'azureuser'@'%' IDENTIFIEDBY 'password';

FLUSH PRIVILEGES;


4)在master mysql上建立目标数据库

还记得在前面编辑mastermysql的my.cnf时,我们指定要复制的数据库是travex。这个数据库如果还不存在,就需要创建。创建数据库可以基于命令行,也可以使用MySQL的图形化客户端。这里使用的是开源的HeidiSQL客户端,创建了travex数据库,并在其中创建了一个名为User的数据表。


5)完成上述操作后,请返回至mysql-master VM的PuTTY窗口。点击PuTTY窗口的左上角图标,在下拉菜单中选择”DuplicateSession”,启动一个新的窗口。再次登录进mysql-master VM。注意:下面的操作需要在这个新窗口完成。

登录到mysql,然后输入下面的命令:

USE travex;

FLUSH TABLES WITH READ LOCK;

SHOW MASTER STATUS;


Master状态显示了复制的起始二进制日志文件及起始位置。如上图所示,slave将从mysql-bin.000004文件的916字节处开始复制。

退出mysql,在bash shell环境下输入下述命令,将travex数据库的内容导出到一个sql文件中。之后,会使用这个sql文件在slave中重建travex数据库。

mysqldump -uroot -p --opt travex > travex.sql

完成这个步骤后,再登入mysql,输入下述命令将master mysql解锁。

UNLOCK TABLES;

QUIT;

6)将sql文件从mysql-master VM传输至mysql-slave1 VM

在mysql-master VM输出的travex.sql需要传输至mysql-slave1 VM中,以便于在slave虚拟机中重建travex数据库。我们使用scp进行跨虚拟机的文件传输,如下:

scp travex.sql azureuser@192.168.0.5:/home/azureuser/travex.sql

这里有两点要注意:

一,我们使用的是mysql-slave1 VM的内部IP。在Azure中,如果两个虚拟机在同一个云服务或虚拟网络中,它们可以通过内部IP相互通信,这有利于提高传输效率,降低通信相关的费用。

二,确保拥有对文件拷贝的目标目录的写权限。由于scp是以azureuser用户的身份登录到mysql-slave1VM,这个用户不是root用户,因此对很多目录都没有写权限,但是它对/home/azureuser目录拥有写权限。



配置MySQL从数据库

我们对主数据库的配置已经完成。下面的关注重点转向从数据库。首先,还是登录到mysql-slave1VM。请注意,mysql-slave1 VM的SSH端口不再是22,而是另一个数字。这是因为mysql-master和mysql-slave1同属于一个云服务中,同一个云服务中只允许有一个22的公共端口,因此mysql-slave1 VM的SSH端口被自动修改。

1)登录mysql,创建travex数据库

使用下述命令,创建一个空的travex数据库:

CREATE DATABASE travex;

EXIT;

2)导入travex数据库的定义和数据

mysql -uroot -p travex


3)编辑从数据库的my.cnf配置文件

注意,如果mysql-slave1 VM中还没有/etc/mysql/my.cnf文件,请参照mysql-master VM中准备my.cnf的步骤来创建该文件。使用编辑器打开/etc/mysql/my.cnf文件,按下述方式设置好相应属性:

relay-log = /var/log/mysql/mysql-relay-bin.log

log_bin = /var/log/mysql/mysql-bin.log

binlog_do_db = travex

server-id = 10


完成上述步骤后,保存并退出编辑器。注意:/var/log/mysql目录可能并不存在,所以需要先创建这个目录,并且将目录的owner从root用户变为mysql用户。

mkdir /var/log/mysql

chown -R mysql:mysql /var/log/mysql

4)重启从数据库,设置好复制参数

service mysql start

CHANGE MASTER TOMASTER_HOST='192.168.0.4',MASTER_USER='azureuser', MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=916;

注意:

a) MASTER_HOST使用的是mysql-master VM的内部IP地址

b) MASTER_LOG_FILE和MASTER_LOG_POS属性的值使用的是配置mysql主数据库时通过SHOWMASTER STATUS命令所显示的信息。


5)启动slave,查看其状态

在mysql命令行环境下,输入下述命令,启动slave,并查看状态:

START SLAVE;

SHOW SLAVE STATUS\G


检测主从式数据库

完成上述的所有步骤后,我们已经搭建好了主从式MySQL数据库的结构。下面我们需要检测这个系统是否如我们所期待的那样。检测方法是,向mysql-master数据库中增添多行数据,然后检测mysql-slave1数据库是否会自动复制这些数据。为此,我们希望使用Heidi SQL客户端同时连接mysql-master和mysql-slave1。

为了使得Heidi SQL客户端可以连接mysql-slave1数据库,我们需要为mysql-slave1VM添加一个MySQL端点。注意:这个新端点的公用端口不能取3306,因为mysql-masterVM已经占用了这个公用端口。为了避免端口冲突,我们使用的是3307端口:


新端点创建好后,使用Heidi SQL客户端连接mysql-slave1数据库。


通过Heidi SQL客户端向mysql-master的travex数据库的User表中插入数据:


刷新mysql-slave1服务器,如果一切顺利,您会看到下面的结果:


至此,我们最终在Windows Azure上实现了MySQL一主一从数据库的复制。如果你能耐着性子跟随以上步骤走到最后,那么相信你已经对WA上IaaS VM有了一个比较全面的理解。如果有可能再重复1-2遍,你会更加得心应手。


资料索引

配置MySQL主从式数据库部分参考了如下链接:

https://www.digitalocean.com/community/articles/how-to-set-up-master-slave-replication-in-mysql



推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
author-avatar
小啊小刺猬0801_302
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有