在集成项目中须要应对不一样环境下的安装配置,主流操做系统大体能够分为三种:Linux、Windows以及UNIX。其中Linux备受青睐的主要缘由有两个:node
首先,Linux做为自由软件有两个特色:一是它免费提供源码,二是爱好者能够按照本身的须要自由修改、复制和发布程序的源码,并公布在Internet上。这就吸引了世界各地的操做系统高手为Linux编写各类各样的驱动程序和应用软件,使得Linux成为一种不只只是一个内核,并且包括系统管理工具、完整的开发环境和开发工具、应用软件在内,用户很容易得到的操做系统。mysql
其次,究其根本,Linux是一个UNIX系统变种,所以也就具备了UNIX系统的一系列优良特性,UNIX上的应用能够很方便地移植到Linux平台上,这使得UNIX用户很容易掌握Linux。linux
基于Linux的安全可靠、效率高、免费、良好的网络支持、与UNIX彻底兼容等方面的考虑,Linux算是最经常使用的一种。这样,在项目中就会有在Linux下安装数据库的需求,例如Oracle、MySQL等。本文主要介绍在Linux环境下安装MySQL数据库的两种方式,以及MySQL数据库的相关配置步骤,其中常见的一些问题也会进行说明,最后会展现一种比较常见的MySQL数据库的备份方式——双机热备。web
数通畅联新员工sql
广大技术爱好者数据库
操做系统: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两种常见的存储引擎之一,特色是表数据文件和表索引文件是共同一个文件,适合大规模数据,小规模的数据反而效率不高,适合并发量高的环境、复杂的查询,支持事务,支持数据自动修复,保证了数据丢失最少
在CentOS上安装MySQL的方式大体能够分为两类,一种是网络环境通畅的状况下,能够经过YUM库联网安装,另外一种是经过本地上传MySQL介质进行安装。
指令:yum list installed | grep mysql
指令:例如yum -y remove mysql-libs.x86_64
如有多个依赖文件则依次卸载,当结果显示为Complete!即卸载完毕
指令:yum list | grep mysql或 yum -y list mysql*
CentOS系统须要正常链接网络
指令:yum -y install mysql-server mysql mysql-devel
指令:例如yum -y remove MySQL-client-advanced-5.6.22*
rpm -qa|grep -imysql
-i忽略大小写
less/var/log/mysqld.log
mysql>update user set password=password('YouPassword') where user='root'; mysql>FLUSH PRIVILEGES; |
远程链接时,防火墙启用端口号
指令:iptables -I INPUT -p tcp--dport 3306 -j ACCEPT
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
指令:rpm -qa | grep mysql
指令:例如rpm -e --nodeps mysql-libs-5.1.47-4.el6.i686
再次检查是否已安装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 |
指令: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%] |
MySQL的经常使用备份方式可分为三种:
优势:最大好处是可以与正在运行的MySQL自动协同工做,在运行期间能够确保备份是当时的点,它会自动将对应操做的表锁定,不容许其余用户修改(只能访问),可能会阻止修改操做,SQL文件通用方便移植。
缺点:备份的速度比较慢,若是是数据量不少的时候,就很耗时间。若是数据库服务器处在提供给用户服务状态,在这段长时间操做过程当中,意味着要锁定表(通常是读锁定,只能读不能写入数据),那么服务就会影响的。
直接拷贝只适用于MYISAM类型的表。这种类型的表是与机器独立的。但实际状况是,设计数据库的时候不可能所有使用MYISAM类型表。也不可能:由于MYISAM类型表与机器独立,方便移植,因而就选择这种表,这并非选择它的理由。
缺点:不能去操做正在运行的MySQL服务器(在拷贝的过程当中有用户经过应用程序访问更新数据,这样就没法备份当时的数据)可能没法移植到其余机器上去。
更多的状况是,会根据业务特色(好比须要支持事务机制就必须使用INNODB),查询速度和服务性能来选择表类型的。
MySQL数据库没有增量备份的机制。当数据量太大的时候备份是一个很大的问题。还好MySQL数据库提供了一种主从备份的机制(也就是双机热备)
优势:适合数据量大的时候。大的互联网公司对于MySQL数据备份,都是采用热机备份。搭建多台数据库服务器,进行主从复制。
实现机制:对于一个MySQL服务器,通常有两个线程来负责复制和被复制。当开启复制以后:
在考虑双机热备时,须要注意,通常意义上的双机热备都会有一个切换过程,这个切换过程多是一分钟左右。在切换过程当中,服务是有可能短期中断的。可是,当切换完成后,服务将正常恢复。所以,双机热备不是无缝、不中断的,但它可以保证在出现系统故障时,可以很快恢复正常的服务,业务不致受到影响。而若是没有双机热备,则一旦出现服务器故障,可能会出现几个小时的服务中断,对业务的影响就可能会形成很严重的损失。
环境要求:
主数据库(Master)IP:10.254.1.248
备份数据库(Slave)IP:10.254.1.249
备份前保证两个数据库的数据一致
Master端
grant file,select,replication slave on *.* to backup@10.254.1.249 identified by '123456'; |
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库的操做,即不记录到日志中 |
在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 |
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> 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 |
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端显示。
首先,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" 目录中
终端执行命令
/etc/init.d/mysql stop |
cp -r /var/lib/mysql /disk1/mysqldata |
先备份,再修改
cp /etc/my.cnf /etc/my.cnfbak vi /etc/my.cnf |
在打开的文件中找到datadir这行代码,查看后面的路径,作备份(在这行代码前加#)
原路径:/var/lib/mysql
新路径:/disk1/mysqldata
先备份,再修改
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
ln -s /disk1/mysqldata /mysql.sock /var/lib/mysql/mysql.sock |
service mysqld start |
mysql> show variables like '%dir%'; |
经过查看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 |
初始化命令
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 |
CentOS镜像下载:
http://www.linuxidc.com/Linux/2007-09/7399p3.htm