Linux服务篇之七:YUM构建MySQL主从架构
一、MySQL引擎了解
MyISAM引擎
默认表类型,它是基于传统的ISAM类型,ISAM是IndexedSequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.不是事务安全的,而且不支持外键,如果执行大量的select, MyISAM比较适合。
InnoDB引擎
支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。Innodb最初是由innobase Oy公司开发,2005年10月由oracle公司并购,目前innodb采用双授权,一个是GPL授权,一个是商业授权。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。
总体来说:
InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。
基本的差别为:
1、MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
2、MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
3、MyISAM适合:(1)做很多count计算;(2)插入不频繁,查询非常频繁;(3)没事务。
4、InnoDB适合:(1)可靠性要求比较高,或者要求事务;(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。
查看数据库引擎
一般情况下,MySQL会默认提供多种存储引擎,可以通过下面的查看:
1、查看MySQL现在已提供什么存储引擎: mysql> show engines
2、查看MySQL当前默认的存储引擎: mysql> show variables like '%storage_engine%'
3、查看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎): mysql> show create table 表名;
4、修改MySQL表空间引擎
设置InnoDB为默认引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB然后重启mysqld服务即可。
可以修改表引擎方法如下:
altertable t1 engine=myisam;
alter table t1 engine=innodb;
如果添加innodb引擎报错,需要执行如下命令:
删除/mysql/data目录下的ib_logfile0,ib_logfile1文件即可。
二、MYSQL主从原理
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司, 目前属于Oracle公司,MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
对应目前主流的LAMP架构来说,Mysql更是得到各位IT运维、DBA的青睐,目前mysql已被orcacle收购,不过好消息是原来mysql创始人已独立出来自己重新开发了一个MariaDB,而且使用的人数越来越多。而且MariaDB兼容mysql所有的功能和相关参数。
Mysql常用两大引擎:MyISAM和innoDB,他们有什么明显的区别呢,什么场合使用什么引擎呢?
1、MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但不提供事务支持,如果执行大量的SELECT操作,MyISAM是更好的选择,支持表锁。
2、InnoDB提供事务支持事务,外部键等高级数据库功能,执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表,支持行锁。
随着访问量的不断增加,Mysql数据库压力不断增加,需要对mysql进行优化和架构改造,可以使用高可用、主从复制、读写分离来、拆分库、拆分表进行优化。下面我们来学习MySQL主从复制高可用如何来实现。
实验环境:准备3台虚拟机,2台yum安装的mysql主从、1台yum安装的LAP;
一、安装LAP服务
1、这一条命令LAP环境即可安装成功,只需要重启apache服务即可:
yum install httpd httpd-devel php php-devel php-mysql -y
检查一下,服务端apache口已经启动好了!
2、创建一个测试页面
1、在apache的发布目录里面创建:/var/www/html
vi index.php
输入一下内容:
<?php
phpinfo();
?>
访问一下这个php的测试网站,出现这个页面,表示php的测试网站已经搭建成功!
3、apahche和php整合
查找一下Apache配置文件中:/etc/httpd/modules,是否有php模块:如果找到了,就证明apahche和php整合成功了!apache会自动加载php模块!
4、php.conf模块插入到httpd.conf的配置文件
cat /etc/httpd/conf.d/php.conf >>/etc/httpd/conf/httpd.conf
插入之前的/etc/httpd/conf/httpd.conf配置文件内容如下:
插入之后的/etc/httpd/conf/httpd.conf配置文件内容如下:
重启apache服务,出现一个警告:php这个模块已经在2个目录中被加载了!需要清理一个,移动到临时目录中,
再次启动apache服务,测试页面照样可以打开!
二、安装MYSQL主服务器
1、一条命令即可:yum install mysql-server -y
只需要重启mysql服务即可,检查一下,服务端口已经启动好了!
2、新建数据库Discuz,用于存放Discuz论坛数据,并授权用户,
三、配置MYSQL的主、从架构
1、在两台MYSQL服务器上分别创建存放数据的目录,并且授予权限:
mkdir �Cp /mydata/data
chown �CR mysql.mysql /mydata/data
2、在Master修改vi /etc/my.cnf内容为如下:
[mysqld]
datadir=/mydata/data
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links isrecommended to prevent assorted security risks
symbolic-links=0
log-bin=mysql-bin
server-id=1
auto_increment_offset=1
auto_increment_increment=2
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
replicate-do-db=all
3、配置msql从,编辑/etc/my.cnf,
[mysqld]
datadir=/mydata/data
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links isrecommended to prevent assorted security risks
symbolic-links=0
server-id=2
auto_increment_offset=2
auto_increment_increment=2
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
4、启动mysql,并进入数据库,默认已经初始化过数据库,
5、在 master主上设置权限:
grant replication slave on *.* to tongbu@'192.168.137.11' identified by "123456";
再执行:show matser status
6、在从服务器上设置指定master ip 和pos点
7、在slave启动slave start,并执行show slave status\G查看Mysql主从状态:
Slave_IO_Running: Yes
Slave_SQL_Running:Yes
两个状态为YES,代表:slave已经启动两个线程,一个为IO线程,一个为SQL线程!
8、然后在Master服务器创建一个数据库和表,
然后查看从是否同步:主从之间数据同步成功!
四、搭建Discuz论坛网站
搭建LAMP,需要让PHP与Apache整合,就是把PHP模块整合到Apache配置文件中去!
php的网站刚刚搭建完成,其他的设置都没有!
1、下载一个软件包,解压到指定的aphache发布目录,
2、赋予discuz目录完全访问权限,
chmod -R 777 data/ uc_server/ config/ uc_client/
3、进入Discuz论坛安装,完成向导安装。
五、模拟故障,测试MYSQL主、从数据库之间的切换
1、关闭主数据库,网站立刻报数据库出错!
2、修改apache的Discuz论坛的的配置文件:
vi /var/www/html/config/config_ucenter.php
vi /var/www/html/config/config_global.php
vi /var/www/html/uc_server/data/config.inc.php
3、在slave上授权LAP访问Discuz数据库:
4、重启LAP、MYSQL服务!
5、打开Discuz首页,完成主从数据库的切换!Discuz论坛首页重现!
4、维修好主MYSQL服务器,再次进行切换:
修改一下配置文件:
vi /var/www/html/conf/conf_ucenter.php
vi /var/www/html/uc_server/data/config.inc.php
vi /var/www/html/conf/config_global.php
并重启apache、mysql服务!
5、Discuz论坛重现!
本文出自 “柏书兵-系统运维” 博客,转载请与作者联系!