这篇文章为转载文章,但是在我学习过程中,经过了我的一些整理和添加修改
在集成项目中需要应对不同环境下的安装配置,主流操作系统大致可以分为三种: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数据库的备份方式——双机热备。
操作系统:CentOS 6.4
MySQL:版本为MySQL5.6
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两种常见的存储引擎之一,特点是表数据文件和表索引文件是共同一个文件,适合大规模数据,小规模的数据反而效率不高,适合并发量高的环境、复杂的查询,支持事务,支持数据自动修复,保证了数据丢失最少
1 安装方式
在CentOS上安装MySQL的方式大致可以分为两类,一种是网络环境通畅的情况下,可以通过YUM库联网安装,另一种是通过本地上传MySQL介质进行安装。
1.1 yum远程安装
查看CentOS自带MySQL是否已安装
指令:yum list installed | grep mysql
首先需要卸载依赖文件
指令:例如yum -y remove mysql-libs.x86_64
若有多个依赖文件则依次卸载,当结果显示为Complete!即卸载完毕
查看yum库上的MySQL版本信息
指令:yum list | grep mysql或 yum -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服务,更改数据库密码
远程连接时,防火墙启用端口号
指令:iptables -I INPUT -p tcp–dport 3306 -j ACCEPT
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
检查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
2 配置过程
2.1 备份方式
MySQL的常用备份方式可分为三种:
逻辑备份
优点:最大好处是能够与正在运行的MySQL自动协同工作,在运行期间可以确保备份是当时的点,它会自动将对应操作的表锁定,不允许其他用户修改(只能访问),可能会阻止修改操作,SQL文件通用方便移植。
缺点:备份的速度比较慢,如果是数据量很多的时候,就很耗时间。如果数据库服务器处在提供给用户服务状态,在这段长时间操作过程中,意味着要锁定表(一般是读锁定,只能读不能写入数据),那么服务就会影响的。
物理备份
直接拷贝只适用于MYISAM类型的表。这种类型的表是与机器独立的。但实际情况是,设计数据库的时候不可能全部使用MYISAM类型表。也不可能:因为MYISAM类型表与机器独立,方便移植,于是就选择这种表,这并不是选择它的理由。
缺点:不能去操作正在运行的MySQL服务器(在拷贝的过程中有用户通过应用程序访问更新数据,这样就无法备份当时的数据)可能无法移植到其他机器上去。
更多的情况是,会根据业务特点(比如需要支持事务机制就必须使用INNODB),查询速度和服务性能来选择表类型的。
双机热备份
MySQL数据库没有增量备份的机制。当数据量太大的时候备份是一个很大的问题。还好MySQL数据库提供了一种主从备份的机制(也就是双机热备)
优点:适合数据量大的时候。大的互联网公司对于MySQL数据备份,都是采用热机备份。搭建多台数据库服务器,进行主从复制。
实现机制:对于一个MySQL服务器,一般有两个线程来负责复制和被复制。当开启复制之后:
作为主服务器Master,会把自己的每一次改动都记录到二进制日志 binlog 中。(从服务器会负责来读取这个log,然后在自己那里再执行一遍。)
作为从服务器Slave,会用master上的账号登陆到master上,读取master的binlog,写入到自己的中继日志 Relaylog,然后自己的SQL线程会负责读取这个中继日志,并执行一遍。
在考虑双机热备时,需要注意,一般意义上的双机热备都会有一个切换过程,这个切换过程可能是一分钟左右。在切换过程中,服务是有可能短时间中断的。但是,当切换完成后,服务将正常恢复。因此,双机热备不是无缝、不中断的,但它能够保证在出现系统故障时,能够很快恢复正常的服务,业务不致受到影响。而如果没有双机热备,则一旦出现服务器故障,可能会出现几个小时的服务中断,对业务的影响就可能会造成很严重的损失。
2.2 配置步骤
主服务器:
开启二进制日志
配置唯一的server-id
获得master二进制日志文件名及位置
创建一个用于slave和master通信的用户账号
从服务器:
配置唯一的server-id
使用master分配的用户账号读取master二进制日志
启用slave服务
环境要求:
主数据库(Master)IP:10.254.1.248
备份数据库(Slave)IP:10.254.1.249
备份前保证两个数据库的数据一致
Master端
进入MySQL命令行, 给备份主机赋予复制权限,即备份主机使用用户名backup,密码123456就可以连接到主服务器,backup就是同步账号
修改配置文件my.cnf[mysqld]:
查看master状态
在MySQL命令行:
结果表示现在写日志的文件是mysql-bin.000013,位置是1105,slave端要从这个点开始同步备份aeaiesb
slave端
停掉数据库
service mysql stop
修改配置文件my.cnf,添加如下配置
重启数据库
service mysql start
在MySQL命令行, 查看slave状态
这时 Slave_IO_Running的值是No,I/O线程没有启动,是无法进行同步的处理步骤:
在命令行下:
这样就可以进行同步了,在master的aeaiesb库中创建表,并插入数据会实时在slave端显示。
3 常见问题
3.1 如果主服务器已经存在应用数据,则在进行主从复制时,需要做以下处理:
(1)主数据库进行锁表操作,不让数据再进行写入动作
mysql> FLUSH TABLES WITH READ LOCK;
(2)查看主数据库状态
mysql> show master status;
(3)复制数据文件
将主服务器的数据文件(整个/opt/mysql/data目录)复制到从服务器,建议通过tar归档压缩后再传到从服务器解压。
(4)取消主数据库锁定
mysql> UNLOCK TABLES;
3.2 更改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
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%’;
3.3 启动失败可能的错误原因
通过查看MySQL日志时发现Table ‘mysql.plugin’ doesn’t exist这样的问题,这是因为新安装的MySQL需要初始化数据库
解决步骤:
进入https://blog.csdn.net/weixin_42604515/article/details/mysql/bin目录下,执行脚本https://blog.csdn.net/weixin_42604515/article/details/mysql_install_db;
执行完(1)后,此时会在https://blog.csdn.net/weixin_42604515/article/details/mysql/var目录下创建两个目录文件mysql、test;
修改mysql、test两个目录及目录下所有文件的权限:
指令:chown mysql:mysql -R mysql test
日志报错
首先关闭selinux服务
cd /etc/selinuxvi 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)
需要重置密码
首先停止MySQL服务
service mysql stop
用mysqld_safe重启服务
/usr/bin/mysqld_safe --skip-grant-tables
无密码登录
mysql –u root
授权
grant all privileges on . to ‘root’@‘localhost’ identified by ‘密码’ with grant option;
授权新的数据库文件存放地址
chown -R mysql:mysql /disk1/mysqldata
CentOS镜像下载
MySQL官方手册
MySQL数据库设置主从同步
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践