1  概述

在集成项目中需要应对不同环境下的安装配置,主流操作系统大致可以分为三种:Linux、Windows以及UNIX。其中Linux备受青睐的主要原因有两个:

首先,Linux作为自由软件有两个特点:一是它免费提供源码,二是爱好者可以按照自己的需要自由修改、复制和发布程序的源码,并公布在Internet上。这就吸引了世界各地的操作系统高手为Linux编写各种各样的驱动程序和应用软件,使得Linux成为一种不仅只是一个内核,而且包括系统管理工具、完整的开发环境和开发工具、应用软件在内,用户很容易获得的操作系统。

其次,究其根本,Linux是一个UNIX系统变种,因此也就具有了UNIX系统的一系列优良特性,UNIX上的应用可以很方便地移植到Linux平台上,这使得UNIX用户很容易掌握Linux。

基于Linux的安全可靠、效率高、免费、良好的网络支持、与UNIX完全兼容等方面的考虑,Linux算是最常用的一种。这样,在项目中就会有在Linux下安装数据库的需求,例如Oracle、MySQL等。本文主要介绍在Linux环境下安装MySQL数据库的两种方式,以及MySQL数据库的相关配置步骤,其中常见的一些问题也会进行说明,最后会展示一种比较常见的MySQL数据库的备份方式——双机热备。

2  预期读者

  • 数通畅联新员工

  • 广大技术爱好者

3  环境信息

操作系统:CentOS 6.4

MySQL版本为MySQL5.6

4  名词解释

Linux:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

CentOS(CommunityEnterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。

MySQL:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MYISAM:MySQL两种常见的存储引擎之一,特点是表数据文件和表索引文件都是独立存放,适合记录少于2000万以下、并发量不是很高的环境,适合简单的查询,不支持事务,容易出现数据丢失,表损坏,经常需要修复,修复往往也导致数据丢失,适合读多写少的环境

INNODB:MySQL两种常见的存储引擎之一,特点是表数据文件和表索引文件是共同一个文件,适合大规模数据,小规模的数据反而效率不高,适合并发量高的环境、复杂的查询,支持事务,支持数据自动修复,保证了数据丢失最少

5  操作步骤

5.1  安装方式

在CentOS上安装MySQL的方式大致可以分为两类,一种是网络环境通畅的情况下,可以通过YUM库联网安装,另一种是通过本地上传MySQL介质进行安装。

5.1.1   yum远程安装

  • 查看CentOS自带MySQL是否已安装

指令:yum list installed | grep mysql

  • 首先需要卸载依赖文件

指令:例如yum -y remove mysql-libs.x86_64

若有多个依赖文件则依次卸载,当结果显示为Complete!即卸载完毕

  • 查看yum库上的MySQL版本信息

指令:yum list | grep mysqlyum -y list mysql*

CentOS系统需要正常连接网络

  • 通过yum安装MySQL

指令:yum -y install mysql-server mysql mysql-devel

  • 安装时会显示有冲突文件,移除冲突的文件

指令:例如yum -y remove MySQL-client-advanced-5.6.22*

  • 查询是否已安装MySQL

rpm -qa|grep -imysql

-i忽略大小写

  • 成功安装后,启动MySQL失败,需要查看一下MySQL的日志信息来定位错误原因

less/var/log/mysqld.log

  • 启动MySQL服务,更改数据库密码

mysql>update user set  password=password('YouPassword') where user='root';

mysql>FLUSH PRIVILEGES;

远程连接时,防火墙启用端口号

指令:iptables -I INPUT -p tcp--dport 3306 -j ACCEPT

5.1.2   本地介质安装

  • 首先下载MySQL安装包

mysql-advanced-5.6.23-linux-glibc2.5-x86_64.tar.gz

  • 解压并放到安装文件夹下,其中需要使用的是

MySQL数据库:MySQL-server-5.6.22-1.linux_glibc2.5.x86_64.rpm

MySQL客户端:MySQL-client-5.6.22-1.linux_glibc2.5.x86_64.rpm

  • 安装前先检查是否已安装MySQL

指令:rpm -qa | grep mysql

  • 如果之前有安装过MySQL,需要删除已安装的MySQL

指令:例如rpm -e --nodeps mysql-libs-5.1.47-4.el6.i686

再次检查是否已安装MySQL

  • 安装MySQL服务端

指令:rpm -ivh MySQL-server-5.6.22-1.linux_glibc2.5.x86_64.rpm

Preparing...  ########################################### [100%]

1:MySQL-server  ########################################### [100%]

A RANDOM PASSWORD HAS BEEN SET FOR THE  MySQL root USER !

You will find that password in  '/root/.mysql_secret'.

You must change that password on your  first connect,

no other statement but 'SET PASSWORD'  will be accepted.

See the manual for the semantics of the  'password expired' flag.

Also, the account for the anonymous user  has been removed.

In addition, you can run:

/usr/bin/mysql_secure_installation

which will also give you the option of  removing the test database.

This is strongly recommended for  production servers.

See the manual for more instructions.

Please report any problems at  http://bugs.mysql.com/

The latest information about MySQL is  available on the web at

http://www.mysql.com

Support MySQL by buying support/licenses  at http://shop.mysql.com

New default config file was created as  /usr/my.cnf and

will be used by default by the server  when you start it.

You may edit this file to change server  settings

  • 检查MySQL 3306端口是否打开了

指令:netstat –nat

发现还没有3306的端口,说明MySQL服务还没有启动

启动MySQL服务

指令:service mysql start

Starting MySQL.......... SUCCESS!

启动成功后,再次检查3306端口号

  • 安装客户端

指令:rpm -ivh MySQL-client-5.6.22-1.linux_glibc2.5.x86_64.rpm

Preparing...  ########################################### [100%]

1:MySQL-client  ^C########################################### [100%]

5.2   配置过程

5.2.1   备份方式

MySQL的常用备份方式可分为三种:

  •  逻辑备份

优点:最大好处是能够与正在运行的MySQL自动协同工作,在运行期间可以确保备份是当时的点,它会自动将对应操作的表锁定,不允许其他用户修改(只能访问),可能会阻止修改操作,SQL文件通用方便移植。

缺点:备份的速度比较慢,如果是数据量很多的时候,就很耗时间。如果数据库服务器处在提供给用户服务状态,在这段长时间操作过程中,意味着要锁定表(一般是读锁定,只能读不能写入数据),那么服务就会影响的。

  • 物理备份

直接拷贝只适用于MYISAM类型的表。这种类型的表是与机器独立的。但实际情况是,设计数据库的时候不可能全部使用MYISAM类型表。也不可能:因为MYISAM类型表与机器独立,方便移植,于是就选择这种表,这并不是选择它的理由。

缺点:不能去操作正在运行的MySQL服务器(在拷贝的过程中有用户通过应用程序访问更新数据,这样就无法备份当时的数据)可能无法移植到其他机器上去。

更多的情况是,会根据业务特点(比如需要支持事务机制就必须使用INNODB),查询速度和服务性能来选择表类型的。

  • 双机热备份

MySQL数据库没有增量备份的机制。当数据量太大的时候备份是一个很大的问题。还好MySQL数据库提供了一种主从备份的机制(也就是双机热备)

优点:适合数据量大的时候。大的互联网公司对于MySQL数据备份,都是采用热机备份。搭建多台数据库服务器,进行主从复制。

实现机制:对于一个MySQL服务器,一般有两个线程来负责复制和被复制。当开启复制之后:

  • 作为主服务器Master,会把自己的每一次改动都记录到二进制日志 binlog 中。(从服务器会负责来读取这个log,然后在自己那里再执行一遍。)

  • 作为从服务器Slave,会用master上的账号登陆到master上,读取master的binlog,写入到自己的中继日志 Relaylog,然后自己的SQL线程会负责读取这个中继日志,并执行一遍。

在考虑双机热备时,需要注意,一般意义上的双机热备都会有一个切换过程,这个切换过程可能是一分钟左右。在切换过程中,服务是有可能短时间中断的。但是,当切换完成后,服务将正常恢复。因此,双机热备不是无缝、不中断的,但它能够保证在出现系统故障时,能够很快恢复正常的服务,业务不致受到影响。而如果没有双机热备,则一旦出现服务器故障,可能会出现几个小时的服务中断,对业务的影响就可能会造成很严重的损失。

5.2.2   配置步骤

环境要求:

  1. 主数据库(Master)IP:10.254.1.248

  2. 备份数据库(Slave)IP:10.254.1.249

  3. 备份前保证两个数据库的数据一致

Master

  • 进入MySQL命令行, 给备份主机赋予复制权限,即备份主机使用用户名backup,密码123456就可以连接到主服务器,backup就是同步账号

grant file,select,replication slave on  *.* to backup@10.254.1.249 identified by '123456';

  • 修改配置文件my.cnf[mysqld]:

sevice-id=1

log-bin=mysql-bin --------------打开日志开关,二进制日志文件

max_binlog_size=104857600

binlog_format=mixed--------日志模式row level和statement level的结合

binlog-do-db= aeaiesb -------------在aeaiesb库进行的操作记录二进制日志文件,而不是对aeaiesb库的操作

binlog-ignore-db=mysql  --------------------忽略对mysql库的操作,即不记录到日志中

  • 查看master状态

在MySQL命令行:

show master status

mysql> show master status;

+----------------------+-----------+------------------+------------------+

| File         | Position | Binlog_Do_DB |  Binlog_Ignore_DB |

+----------------------+-----------+-------------------+------------------+

| mysql-bin.000013 |     1150 | aeaiesb | mysql    |

+-----------------------+----------+------------------+------------------+

1 row in set (0.00 sec)

结果表示现在写日志的文件是mysql-bin.000013,位置是1105,slave端要从这个点开始同步备份aeaiesb

slave

  • 停掉数据库

service mysql stop

  • 修改配置文件my.cnf,添加如下配置

server-id=2

replicate-same-server-id

master-host=10.254.1.248

master-user=backup

master-password=123456

master-port=3306

master-connect-retry=60 ----重复连接时间间隔

replicate-do-db=aeaiesb---同步master的aeaiesb库

relay-log=miniweb2-relay-bin----设置I/O线程读master的binlog并写入本地的文件名,即为relay-log

  • 重启数据库

service mysql start

  • 在MySQL命令行, 查看slave状态

mysql> show slave status/G;

***************************  1. row ***************************

Slave_IO_State:

Master_Host: 10.254.1.248

Master_User: backup

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql_bin.000013

Read_Master_Log_Pos: 1105

Relay_Log_File:  localhost-relay-bin.000001

Relay_Log_Pos: 4

Relay_Master_Log_File: mysql_bin.000013

Slave_IO_Running: No

Slave_SQL_Running: Yes

Replicate_Do_DB: aeaiesb

  • 这时 Slave_IO_Running的值是No,I/O线程没有启动,是无法进行同步的处理步骤:

1) 在命令行下:

(1)slave stop;

(2)change master to  master_host='10.254.1.248',master_user='backup',master_password='123456',master_log_file='mysql-bin.000014',master_log_pos=1150  ;(前面查看的master状态)

(3)slave start;

(4)show slave status;

mysql>  show slave status/G;                                                                                                          *************************** 1. row ***************************

Slave_IO_State: Waiting for master to  send event

Master_Host: 10.254.1.248

Master_User: backup

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000013

Read_Master_Log_Pos: 1105

Relay_Log_File:  localhost-relay-bin.000002

Relay_Log_Pos: 251

Relay_Master_Log_File: mysql-bin.000013

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: aeaiesb

这样就可以进行同步了,在master的aeaiesb库中创建表,并插入数据会实时在slave端显示。

5.3   常见问题

5.3.1   更改MySQL数据存储位置

首先,MySQL安装完成后不像 SQLServer 默认安装在一个目录,它的数据库文件、配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux的初学者,因为 Linux本身的目录结构就比较复杂,如果搞不清楚MySQL的安装目录那就无从谈起深入学习。

a、数据库目录     /var/lib/mysql/

b、配置文件         /usr/share/mysql(mysql.server命令及配置文件)

c、相关命令         /usr/bin(mysqladmin mysqldump等命令)

d、启动脚本          /etc/rc.d/init.d/(启动脚本文件mysql的目录)

其次,由于MySQL数据库目录占用磁盘比较大,而MySQL默认的数据文件存储目录为 /"var/lib/mysql",也可以把要把数据目录移到"/" 根目录下的 "mysqldata" 目录中

  • 首先停止MySQL服务

终端执行命令

/etc/init.d/mysql  stop

  • 在终端将原来mysql数据库目录文件全部都复制到新的数据库目录下

cp -r /var/lib/mysql  /disk1/mysqldata

  • 修改my.cnf配置文件

先备份,再修改

cp /etc/my.cnf  /etc/my.cnfbak

vi /etc/my.cnf

在打开的文件中找到datadir这行代码,查看后面的路径,做备份(在这行代码前加#)

原路径:/var/lib/mysql

新路径:/disk1/mysqldata

  • 修改mysqld

先备份,再修改

cp /etc/init.d/mysqld /etc/init.d/mysqldbak

vi  /etc/init.d/mysqld

datadir原路径:/var/lib/mysql

datadir新路径:/disk1/mysqldata

  • 修改mysqld_safe文件

cp /usr/bin/mysqld_safe  /usr/bin/mysqld_safebak

vi  /usr/bin/mysqld_safe

datadir原路径:/var/lib/mysql

datadir新路径:/disk1/mysqldata

  • 建立一个mysql.sock的链接

ln -s /disk1/mysqldata  /mysql.sock /var/lib/mysql/mysql.sock

  • 重启服务

service mysqld  start

  • 进入MySQL命令行查询数据文件目录地址

mysql> show variables like '%dir%';

5.3.2   启动失败可能的错误原因

通过查看MySQL日志时发现Table ‘mysql.plugin’ doesn’t exist这样的问题,这是因为新安装的MySQL需要初始化数据库

解决步骤:

1) 进入./mysql/bin目录下,执行脚本./mysql_install_db;

2) 执行完(1)后,此时会在./mysql/var目录下创建两个目录文件mysql、test;

3) 修改mysql、test两个目录及目录下所有文件的权限:

指令:chown mysql:mysql -R mysql test

  • 日志报错

mysqld_safe Starting mysqld daemon with  databases from /var/lib/mysql

[Warning] Can't create test file  /var/lib/mysql/localhost.lower-test

[Warning] Can't create test file  /var/lib/mysql/localhost.lower-test

/usr/sbin/mysqld: Can't change dir to  '/var/lib/mysql/' (Errcode: 13)

[ERROR] Aborting

[Note] /usr/sbin/mysqld: Shutdown complete

首先关闭selinux服务

cd /etc/selinux

vi config

修改selinux为disabled,重启机器

  • 启动失败时

Fatal error: Can't open and lock  privilege tables: Table 'mysql.host' doesn't exist

使用命令

mysql_install_db --user=mysql

初始化命令

  • 启动MySQL成功后,登录时

ERROR 1045 (28000): Access denied for  user 'root'@'localhost' (using password: YES)

需要重置密码

1) 首先停止MySQL服务

service mysql stop

2) 用mysqld_safe重启服务

/usr/bin/mysqld_safe --skip-grant-tables

3) 无密码登录

mysql –u root

4) 授权

grant all privileges on *.* to  'root'@'localhost' identified by '密码' with grant  option;

  • 授权新的数据库文件存放地址

chown -R mysql:mysql /disk1/mysqldata

6  相关链接

CentOS镜像下载:

http://www.linuxidc.com/Linux/2007-09/7399p3.htm

CentOS系统MySQL双机热备配置的更多相关文章

  1. Mysql双机热备配置(超详细多图版)

    一.双击热备介绍 1.基本概念 双机热备特指基于高可用系统中的两台服务器的热备(或高可用),双机高可用按工作中的切换方式分为:主-备方式(Active-Standby方式)和双主机方式(Active- ...

  2. Mysql双机热备--预备知识

    1.双机热备 对于双机热备这一概念,我搜索了很多资料,最后,还是按照大多数资料所讲分成广义与狭义两种意义来说. 从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务.当一台服务器 ...

  3. windows下使用mysql双机热备功能

    一. 准备工作 1. 准备两台服务器(电脑),接入局域网中,使互相ping得通对方 2. 两台服务器都安装mysql-server-5.1,必须保证mysql的版本一致 3. 假设,服务器A:192. ...

  4. mysql双机热备的实现

    转:http://blog.csdn.net/qq394829044/article/details/53203645 Mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题.还好 ...

  5. (转)mysql双机热备的实现

    mysql双机热备的实现 原文:http://www.zjian.me/web/php/mysql%E5%8F%8C%E6%9C%BA%E7%83%AD%E5%A4%87%E7%9A%84%E5%AE ...

  6. mysql 主从复制(mysql双机热备的实现)

    转:http://blog.csdn.net/qq394829044/article/details/53203645 Mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题.还好 ...

  7. MySQL双机热备环境搭建

    一.    前期准备 准备两台服务器(电脑),接入到同一局域网中,能够使双方可以ping通: 安装MySQL数据库,具体安装方法网上很全面,但是安装的版本需保持一致: 服务器IP地址设置. l  A服 ...

  8. mysql双机热备的配置步骤

    设置双机热备: 首先要在两台机器上建立同步用户: grant replication slave on *.* to 'repdcs'@'192.168.21.39' identified by '1 ...

  9. 基于主主复制的mysql双机热备+keepalived实现高可用性

随机推荐

  1. jquery.Callbacks的实现

    前言 本人是一个热爱前端的菜鸟,一直喜欢学习js原生,对于jq这种js库,比较喜欢理解他的实现,虽然自己能力有限,水平很低,但是勉勉强强也算是能够懂一点吧,对于jq源码解读系列,博客园里有很多,推荐大 ...

  2. 简单搭建 nuget 内部服务器

    搭建 nuget 内部服务器,最好的方式是使用 ProGet,参考博文<用 ProGet 搭建内部的 NuGet 服务器>,好处非常多,但需要使用 SQL Server 数据库,如果不想使 ...

  3. node中子进程同步输出

    管道 通过"child_process"模块fork出来的子进程都是返回一个ChildProcess对象实例,ChildProcess类比较特殊无法手动创建该对象实例,只能使用fo ...

  4. 多线程 异步 beginInvoke EndInvoke 使用

    有许多耗时操作时,还要响应用户操作.这时候就需要用其他线程或者异步来搞.本来是改造公司的日志组件.因为多上了个国外大区的业务到来本系统来.这个系统其他地方都好就是日志,动不动就要死给我们看.有时候寻找 ...

  5. 微软发布VSBT,无需安装Visual Studio即可实现项目编译

    安装了Visual Studio的那些使用微软平台的开发者通常能够非常容易地操作自己的项目:打开解决方案,修改内容,设置好所有必须的文件以及配置后编译项目.但是在构建服务器或者持续交付系统等没有安装V ...

  6. 数据库备份并分离日志表(按月)sh 脚本

    #!/bin/sh year=`date +%Y` month=`date +%m` day=`date +%d` hour=`date +%H` dir="/data/dbbackup/f ...

  7. 我的MYSQL学习心得(九) 索引

    我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  8. 在CentOS上构建.net自动化编译环境

             我们知道在Windows上我们很容易构建于MSBuild的自动化编译环境,那么在CentOS也是可以的,主要是需要Mono. 在这儿我们选择Jenkins+Gitlab+Mono在C ...

  9. .NET程序的性能要领和优化建议

    前几天在老赵的博客上看到,Bill Chiles (Roslyn 编译器的Program Manager)写了一篇文章叫做<Essential Performance Facts and .NE ...

  10. Entity Framework 6 Recipes 2nd Edition(10-4)译 -> 从存储过程返回一个复杂类型

    10-4. 从存储过程返回一个复杂类型 问题 想在方法中使用一个返回复杂类型的存储过程 解决方案 假设我们已经有如Figure 10-3.所示的模型,该Employee (雇员)模型包含Employe ...