什么是数据库: 存放数据的仓库
RDBMS-->(Relational Database Management System) 关系型数据库管理系统
DBMS--->(Database Managerment System) 数据库管理系统
数据库分类:
1. 关系型数据库
2. 非关系型数据库
常用关系型数据库:
Oracle,MySQL,MariaDB,SQL Server,Access,PostgreSQL,DB2,Informix,Sybase
PostgreSQL 自由的对象-关系数据库服务器(数据库管理系统),有非常活跃的开发队伍(黑客支持)
常用非关系型数据库:
Memcache,Redis,MongoDB,Cassandra
其他不常用非关系型数据库:
HBase、MemacheDB、BerkeleyDB、Tokyo Cabinet
##################################################
##################################################
##################################################
MySQL
MySQL是一种关系型数据库管理系统,
由瑞典MySQL AB公司开发,目前属于Oracle公司
特点:
1. mysql性能卓越,服务稳定,很少出现异常宕机
2. mysql开源免费,无版权制约,自主性及使用成本低
3. 产品耦合度,mysql支持多种操作系统,支持多开发语言,特别是php
4. 技术积累,庞大的活跃的社区,
5. 软件体积小,安装简单,易于维护
URL:http://www.mysql.com/
MySQL采用双授权政策
社区版和商业版
又被细分为Alpha,Beta,RC,GA版本
GA为正式版
社区版,企业版区别--->
1. 价格, 社区版免费,企业版高额费用
2. 技术, 企业版具有MySQL企业级服务器,系统监控工具,经过严格的测试认证
社区版没有那么严格
3. 服务, 社区版不提供技术支持,企业版反之
4. 协议, 商业版不支持GPL协议
产品线路:
1. 5.0.XX - 5.1.XX 系列
这条产品线继续完善改进用户体验和性能,
同时增加新功能,是mysql早期产品的延续,
如rhel6自带的mysql
2. 5.4.XX - 5.7.XX 系列
mysql社区和第三方公司percona整合的,
吸收新的算法和存储引擎
3. 6.0.XX - 7.X.XX 系列
主要是为了更好的推广MySQL Cluster版本,
提供Cluster版本的性能和稳定性,
这个版本比较少公司用,原因是出来太晚了
MySQL安装:
Way 1: rpm/yum安装
#使用二进制方式安装,开发商针对不同的操作系统和环境穿件的rpm包,通过下载直接安装
rpm -ivh *.rpm
yum -y install mysql-server
# mysql 为客户端登录程序
# mysql-server 数据库服务器
Way 2: 源码编译安装
tar ---> cmake ---> make ---> make install
Way 3: 批量部署, src.rpm 通过spec文件
# 没研究过
源码编译安装 MySQL 5.5.32
# 对于不通版本源码编译方法不一
# 对于mysql 5.1 系列 不需要使用cmake
# ./configure --> make --> make install
1. 安装编译工具 cmake
yum -y install cmake gcc gcc-c++
# cmake 依赖c语言 需安装Linux下的C编译工具 gcc gcc-g++/C++
2. 下载 MySQL
# 去官网下载
wget http://cdn.mysql.com/archives/mysql-5.5/mysql-5.5.32.tar.gz
解压到指定目录
tar -zxf mysql-5.5.32.tar.gz -C /usr/local/src
3. 解决以来
yum -y install cmake ncurses-devel #用于终端操作的开发包
4. 创建MySQL用户
useradd -u 8001 -M -s /sbin/nologin mysql
# -u 8001 指定UID, -M 不创建宿主目录, -s /sbin/nologin 禁止登录
5. 创建数据库存放目录
mkdir /data # 便于挂载,
# 推荐将数据库数据文件与系统分盘或分区存放,避免IO影响
6. 编译
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_EXTRA_CHARSETS=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWIHT_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/data -DMYSQL_USER=mysql
参数解释:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql #指定安装目录为/usr/local/mysql
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock #指定套接字文件为mysql.sock 通信文件
-DDEFAULT_CHARSET=utf8 #指定字符集为utf8
-DDEFAULT_COLLATION=utf8_general_ci #指定字符校对
-DMYSQL_EXTRA_CHARSETS=all #扩展字符支持 默认all
-DWITH_storage_STORAGE_ENGINE=1 #开启存储storage引擎支持
# storage=MyISAM,Innobase,MEMORY,CVS等
-DWITH_READLINE=1 #开启READLINE模式
-DWITH_LOCAL_INFILE=1 #启动加载本地数据引擎
-DMYSQL_DATADIR=/data #指定数据存储目录
-DMYSQL_USE=mysql #指定运行用户
扩展:
-DWITH_PARTITION_STORAGE_ENGINE=1 #支持分区表
-DINSTALL_LIBDIR=dir_name #指定库文件安装目录
-DSYSCONFDIR=dir_name #指定默认配置文件存放路径
# 默认配置文件为my.cnf
7. 安装
make -j 4 && make install # -j 4 指定4个线程完成本操作,不指定默认为1
8. 授权用户
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /data
chmod 1777 /tmp
9. 创建配置文件
cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
10. 设置环境变量 #为了以后便于敲命令,不用带路径了
echo ‘PATH=/usr/local/mysql/bin:$PATH‘ >> /etc/profile
source $! # $! = 上一条指令最后一个参数
11. 创建启动脚本
拷贝启动脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
添加脚本可执行权限
chmod + x $!
设置脚本mysql安装目录和数据目录
sed -i "s%^basedir=%basedir=/usr/local/mysql%g" /etc/init.d/mysqld
sed -i "s%^datadir=%datadir=/data%g" /etc/init.d/mysqld
添加脚本chkconfig
chkconfig --add mysqld
添加开机启动
chkconfig mysqld on
12. 初始化数据库
在运行数据库之前,需要初始化一下数据
chmod +x /usr/local/mysql/scripts/mysql_install_db
/usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf
--basedir=/usr/local/mysql --datadir=/data --user=mysql
# 如果在初始化之前运行了数据库,会报错如下:
[[email protected] ~]# service mysqld start
Starting MySQL. ERROR! The server quit without updating PID file (/data/xiaogan63.cn.pid).
#
[[email protected] ~]# /usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf--basedir=/usr/local/mysql --datadir=/data --user=mysql
TAL ERROR: Could not find ./bin/my_print_defaults
If you compiled from source, you need to run ‘make install‘ to
copy the software into the correct location ready for operation.
If you are using a binary release, you must either be at the top
level of the extracted archive, or pass the --basedir option
pointing to that location.
# 没有设置环境变量
[[email protected] ~]# /usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf--basedir=/usr/local/mysql --datadir=/data --user=mysql
Installing MySQL system tables...
OK
Filling help tables...
OK
成功!
因为启动脚本错了
sed -i 命令错误替换了字符串导致,mysqld服务无法启动
错误如下:
[[email protected] ~]# service mysqld start
Starting MySQL. ERROR! The server quit without updating PID file (/data/xiaogan63.cn.pid)
重新拷贝配置文件,并修改如下:
sed -i "s%^basedir=%basedir=/usr/local/mysql%g" /etc/init.d/mysqld
sed -i "s%^datadir=%datadir=/data%g" /etc/init.d/mysqld
替换字符串少了一个符号 ^
[[email protected] ~]# grep "^basedir=" /etc/init.d/mysqld -R --color
basedir=/usr/local/mysql
[[email protected] ~]# grep "^datadir=" /etc/init.d/mysqld -R --color
datadir=/data
[[email protected] ~]#
[[email protected] ~]# grep "basedir=" /etc/init.d/mysqld -R --color
# basedir=<path-to-mysql-installation-directory>
basedir=/usr/local/mysql
basedir=/usr/local/mysql
# *not* set inside of the --basedir= handler.)
--basedir=*) basedir=`echo "$arg" | sed -e ‘s/^[^=]*=//‘`
[[email protected] ~]# grep "datadir=" /etc/init.d/mysqld -R --color
datadir=/data
datadir=/data
datadir="$basedir/data"
datadir="$basedir/data"
--datadir=*) datadir=`echo "$arg" | sed -e ‘s/^[^=]*=//‘`
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
[[email protected] ~]#
13. 初始化安全配置
mysql_secure_installation #安全初始化配置
# 如果没有运行mysqld服务,则会报错如下:
[[email protected] ~]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we‘ll need the current
password for the root user. If you‘ve just installed MySQL, and
you haven‘t set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘ (2)
需将服务启动即可
Enter current password for root (enter for none): #直接回车即可
OK, successfully used password, moving on...
Set root password? [Y/n] y # 设置root密码
# 输入两次密码
... Success!
Remove anonymous users? [Y/n] y # 移除匿名用户
... Success!
Disallow root login remotely? [Y/n] y #禁止root远程登录
... Success!
Remove test database and access to it? [Y/n] y #删除测试数据库
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reload privilege tables now? [Y/n] y # 重新加载授权表
... Success!
All done! If you‘ve completed all of the above steps, your MySQL
installation should now be secure.
14. 安全优化小配置:
用户安装:
mysql> select user,host from mysql.user;
# 只留下root用户的localhost和127.0.0.1;
mysql> delete from mysql.user where user=‘‘;
我们还可以删除所有用户,并重新创建一个超级管理员,操作如下:
删除所有用户
mysql> delete from mysql.user;
授权所有权限给[email protected]‘localhost‘
mysql> grant all privileges on *.* to [email protected]‘localhost‘ identified by
‘yourpasswd‘ with grant option;
使配置生效
mysql> flush privileges;
查看
mysql> select user,host from mysql.user;