Mysql 数据库简介
MySQL 是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最用标准化语言。
关系数据库管理系统(Relational Database Management System,RDBMS),是将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是关系数据库管理系统 。
数据库一般分为以下两种:关系型数据库,非关系型数据库。
MySQL现阶段有免费版本和付费版本,公司里面使用MySQL 多数都是使用免费版本。
Mariadb 数据库是MySQL 数据库原来的团队,后续独立出来进行开发的。
常用的关系型数据库软件有: MYSQL、Mariadb、Oracle、SQL Server、PostgreSQL、DB2等
常用的非关系型数据库软件有: Redis、memcached。
Mysql引擎
MySQL 引擎有很多,企业里面主流的myisam、innodb 两种。
MyISAM:主要强调的是性能,其执行数度比InnoDB类型更快,但不提供事务支持,不支持外键,如果执行大量的SELECT(查询)操作,MyISAM是更好的选择,支持表锁。myisam引擎查询性能高。
InnoDB:提供事务支持事务、外键、行级锁等高级数据库功能,可执行大量的INSERT或UPDATE,InnoDB引擎写性能高。
Mysql数据库安装
MySQL安装方式有两种,一种是yum/rpm安装,另外一种是tar源码安装。
yum安装
Yum 安装方法很简单,执行命令如下即可
[root@www zh]# yum install -y mariadb mariadb-devel mariadb-server
安装完成之后可以查询一下软件是否安装成功
[root@www zh]# rpm -qa | grep mariadb
mariadb-libs-5.5.64-1.el7.x86_64
mariadb-devel-5.5.64-1.el7.x86_64
mariadb-server-5.5.64-1.el7.x86_64
mariadb-5.5.64-1.el7.x86_64
源码安装
下载包和解压包
[root@www ]# cd /usr/src/
[root@www src]# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.5/mysql-5.5.60.tar.gz --下载包
[root@www src]# tar -xf mysql-5.5.60.tar.gz --解压包
预编译、编译和安装
[root@www src]# cd mysql-5.5.60
[root@www mysql-5.5.60]# yum install gcc c ncurses-devel libaio bison gcc-c++ git cmake ncurses-devel ncurses -y --安装编译依赖包(MySQL-5.x以后使用cmake编译安装)Mysql有自己的编译工具,不同nginx的configure工具,用的是cmake工具
各个包功能的简单介绍:
gcc gcc是Linux下的C语言编译工具,mysql源码编译完全由C和C++编写,要求必须安装GCC4.4.6或以上版本
cmake mysql使用cmake跨平台工具预编译源码,用于设置mysql的编译参数。如:安装目录、数据存放目录、字符编码、排序规则等。安装最新版本即可。
ncurses 字符终端处理库
预编译,这里面指定了安装路径和参数,选项如下:
-DCMAKE_INSTALL_PREFIX:指定MySQL安装路径
-DMYSQL_DATADIR:MySQL数据文件路径
-DSYSCONFDIR:配置文件存储路径
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55/ \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mysql \
-DSYSCONFDIR=/usr/local/mysql55/ \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_BIG_TABLES=1 \
-DWITH_DEBUG=0
编译和安装
[root@www mysql-5.5.60]make && make install
配置MySQL
[root@www mysql-5.5.60]# cp support-files/my-large.cnf /usr/local/mysql55/my.cnf --support-files为我们提供了默认的配置文件,自己根据需要选择合适的配置文件拷贝到对应目录下
[root@www mysql-5.5.60]# cp support-files/mysql.server /etc/init.d/mysqld --拷贝服务脚本文件到/etc/init.d/目录下并改名为mysqld,mysqld里面是shell脚本用来启动MySQL
[root@www mysql-5.5.60]# chmod +x /etc/init.d/mysqld --给予脚本执行权限
[root@localhost mysql-5.5.60]# useradd -s /sbin/nologin mysql --创建MySQL用户
[root@www mysql-5.5.60]# mkdir -p /data/mysql --创建数据目录
[root@www mysql-5.5.60]# chown -R mysql. /data/mysql --给数据目录权限
[root@www mysql-5.5.60]# /usr/local/mysql55/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql55 --初始化MySQL
--mysql_install_db 会初始化数据目录,并创建它所包含系统表(如果系统表不存在),它还初始化管理表所需的系统表空间和相关的数据结构。从5.6.8开始mysql_install_db 是个perl脚本,之前是shell脚本。
启动mysql
[root@localhost mysql-5.5.60]# /etc/init.d/mysqld start --如果碰到下面的报错修改/etc/my.cnf
Starting MySQL.200320 17:46:41 mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'. ERROR! The server quit without updating PID file (/data/mysql/localhost.localdomain.pid).
[root@localhost bin]# vim /etc/my.cnf --修改如下
[mysqld]
datadir=/data/mysql
socket=/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#[mysqld_safe]
#log-error=/var/log/mariadb/mariadb.log
#pid-file=/var/run/mariadb/mariadb.pid
[root@localhost bin]# /etc/init.d/mysqld start
Starting MySQL.. SUCCESS!
可以考虑将MySQL加入service服务:
chkconfig --add mysqld
chkconfig --level 35 mysqld on
service mysqld restart
数据库操作
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.01 sec)
初始化后,默认会有四个数据库
information_schema:信息数据库。主要保存着关于MySQL服务器所维护的所有其他数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权 限等。通过show databases;查看到数据库信息,也是出自该数据库中得SCHEMATA表。
mysql: mysql的核心数据库。主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。
performance_schema: 用于性能优化的数据库。
mysql> use information_schema ;
Database changed
mysql> select * from SCHEMATA;
+--------------+--------------------+----------------------------+------------------------+----------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
+--------------+--------------------+----------------------------+------------------------+----------+
| def | information_schema | utf8 | utf8_general_ci | NULL |
| def | mysql | utf8 | utf8_general_ci | NULL |
| def | performance_schema | utf8 | utf8_general_ci | NULL |
| def | test | utf8 | utf8_general_ci | NULL |
+--------------+--------------------+----------------------------+------------------------+----------+
数据库操作的一些命令
创建数据库
mysql> create database mytest;
Query OK, 1 row affected (0.00 sec)
修改创建数据库的字符集
mysql> alter database mytest default character set utf8;
Query OK, 1 row affected (0.01 sec)
mysql> show create database mytest;
+----------+-----------------------------------------------------------------+
| Database | Create Database |
+----------+-----------------------------------------------------------------+
| mytest | CREATE DATABASE `mytest` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+
create database zabbix charset=utf8;
或者
mysql> create database if not exists zabbix charset=utf8; --用上面的这条命令创建数据库,如果数据库已经存在就不会报错了
mysql> select database (); --查看当前正在使用哪个数据库
+-------------+
| database () |
+-------------+
| test |
+-------------+
1 row in set (0.00 sec)
mysql> drop database zabbix; --删除数据库