Mysql 服务器企业实战
数据库入门简介
- MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于Oracle旗下公司。
- MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
- MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。
- MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
- (RDBMS即关系数据库管理系统(Relational Database Management System),是将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是关系数据库管理系统,常用的数据库软件有Oracle、SQL Server等。)
- RDBMS的特点:
数据以表格的形式出现
每行记录数据的实内容
每列记录数据真实内容的数据域
无数的行和列组成一张表
若干的表组成一个数据库
Mysql 引擎介绍
- MYSQL引擎包括:ISAM、MyISAM、InnoDB 、MEMORY、CSV、BLACKHOLE、ARCHIVE、PERFORMANCE_SCHEMA、Berkeley、Merge、Federated、Cluster/NDB等
- 其中MyISAM、InnoDB使用最为广泛,mysql5.5以后默认使用的引擎是Innodb。
- 数据库事务:是指逻辑上对数据的一组操作,这组操作要一次全部成功,如果失败,则全部失败,因为事务是不可分割。
- 事务管理语句
- 查询、定义、操纵、控制语句,共9个命令
查询语句:select
定义:create、dorp、alter
操纵:insert、update、delete
控制:grant(授权)、revoke(移出授权)
- InnoDB事务型数据库的首选引擎,支持ACID事务,ACID包括:原子性(不可分割性)(Atomicity)、**一致性**(Consistency)、**隔离性**(Isolation)、**持久性**(Durability),一个支持事务(Transaction)的数据库,必需要具有这四种特性,否则在执行事务过程无法保证数据的正确性。
- 原子性:一个事务中所有的操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚成事务开始前的状态。
- 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
隔离性:数据库运行多个并发事务同时对数据进行读写和修改的能力,防止多个事务并发执行由于交叉导致数据的不同。
- 隔离性不同级别:读未提交、读提交、可重复读、串行化。
- 持久性:事务处理完成后,对数据的修改是永久的。
- MyISAM类型的数据库表强调的是性能,其执行数度比InnoDB类型更快,但不提供事务支持,不支持外键,如果执行大量的SELECT(查询)操作,MyISAM是更好的选择,支持表锁。
Mysql 数据库安装方式
- MySQL数据库安装方法有两种,一种是yum/rpm通过YUM源在线安装,另外一种是通过源码软件编译安装。
- Cmake 是一种跨平台的编译工具,比configure更高级,cmake主要编写cmakelists.txt,然后用cmake命令将cmakelists.txt转化成make需要的Makefile文件,最后用make命令编译源码生成的可执行程序。
- Cmake工具和configure工具,configure二进制程序用来生成Makefile文件,Makefile记录软件需要的环境和要编译的参数。
- YUM 安装方式
方式1: yum install –y mysql-server mysql-devel mysql 方式2: yum install –y mariadb-server mariadb
- 源码安装方式
方式1:使用mysql 特有的cmake 编译 cmake make && make install 方式2:使用./configure 编译 ./configure make -j4 && make -j4 install
Mysql 必备命令操作
- 查看所有数据库
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | S | | mysql | | performance_schema | | test | +--------------------+
- 创建名为 S 的数据库
mysql> create database S default charset utf8 collate utf8_general_ci; utf8 编码 Query OK, 1 row affected (0.00 sec) mysql>
- 进入S数据库
mysql> use S; Database changed
- 查看数据库里有多少张表
mysql> show tables; Empty set (0.00 sec)
- 创建名为 t1 的表,并创建两个个字段 id、name,varchar表示设置数据长度,一个汉字=2个字符=2Bytes
mysql> create table t1(id int(20),name varchar(10)); Query OK, 0 rows affected (0.01 sec)
- 向表中插入数据
mysql> insert into t1 values("1","liuaoni"); Query OK, 1 row affected (0.00 sec)
- 查看t1表的数据内容
mysql> select *from t1; +------+---------+ | id | name | +------+---------+ | 1 | liuaoni | +------+---------+ 1 row in set (0.00 sec) mysql>
- id、age 多个条件查询
mysql> select *from t1 where id=1 and name="liuaoni"; +------+---------+ | id | name | +------+---------+ | 1 | liuaoni | +------+---------+ 1 row in set (0.00 sec) mysql>
- 查看t1b表结构(字段内容)
mysql> desc t1; +-------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(20) | YES | | NULL | | | name | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.01 sec)
- 修改name 字段的长度
mysql> alter table t1 modify column name varchar(5); Query OK, 1 row affected, 1 warning (0.02 sec) Records: 1 Duplicates: 0 Warnings: 1 MariaDB [hbs]>
- 修改name字段的内容
mysql> update t1 set name="nidaye" where id=1; Query OK, 1 row affected, 1 warning (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 1 MariaDB [hbs]>
- 刷新权限
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
- 清空表内容
mysql> delete from t1; Query OK, 1 row affected (0.00 sec)
- 删除表
mysql> drop table t1; Query OK, 0 rows affected (0.00 sec)
- 删除数据库 hbs
mysql> drop database hbs; Query OK, 0 rows affected (0.00 sec)
- 查看数据库字符集
mysql> show variables like '%char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
- 查看mysql 存储引擎
mysqk> show engines;
- 查看mysql 默认存储引擎
mysql> show variables like '%stroage_engine%'; Empty set (0.00 sec)
- 修改mysql t1 表存储引擎
mysql> alter table t1 engine=innodb;
- 相关授权操作
mysql> show grants; 查看当前授权 +---------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+ 2 rows in set (0.00 sec)
- 创建用户
用户登录数据库 [root@localhost ~]# mysql -uhe -phe123! -h192.168.10.11 mysql> create user 'he'@'192.168.10.11' identified by 'he123!'; 创建用户he,密码为he123! mysql> drop user 'he'@'192.168.10.11'; 删除数据用户he Query OK, 0 rows affected (0.00 sec)
Mysql 字符集设置
- 计算机中储存的信息都是用二进制数方式来表示的,读者每天看到屏幕显示的英文、汉字等字符是二进制数转换之后的结果。通俗的说,将汉字按照某种字符集编码存储在计算机中,称为"编码"。将存储在计算机中的二进制数解析显示出来,称为"解码",在解码过程中,如果使用了错误的解码规则,会导致显示乱码。
- 编辑vim /etc/my.cnf配置文件,在相应段中加入相应的参数字符集修改完毕,重启MySQL服务即可。
[client]字段里加入:default-character-set=utf8 [mysqld]字段里加入: character-set-server=utf8 [mysql]字段里加入 : default-character-set=utf8
- MYSQL 命令行里运行以下命令:
show variables like 'char%' SET character_set_client = utf8; SET character_set_results = utf8; SET character_set_connection = utf8;
MySQL数据库配置并发优化
- Mysql优化是一项非常重要的工作,而且是一项长期的工作,曾经有一个为位DBA前辈说过:mysql的优化,三分配置的优化,七分sql语句的优化。
- Mysql的优化:一般分为配置的优化、sql语句的优化、表结构的优化、索引的优化,而配置的优化:一般包括系统内核优化、mysql本身配置文件的优化。
- MySQL常见的优化参数详解:
- 硬件上的优化:增加内存和提高磁盘读写速度,都可以提高MySQL数据库的查询,更新的速度。另一种提高MySQL性能的方式是使用多块磁盘来存储数据。因为可以从多块磁盘上并行读取数据,这样可以提高读取数据的速度。
- MySQL参数的优化:内存中会为MySQL保留部分的缓冲区。这些缓冲区可以提高MySQL的速度。缓冲区的大小都是在MySQL的配置文件中进行设置的。
下面对几个重要的参数进行详细介绍:
key_buffer_size: 表示索引缓存的大小。这个值越大,使用索引进行查询的速度就越快。 table_cache: 表示同时打开的表的个数。这个值越大,能同时打开的表的个数就越多。这个值不是越大越好,因为同时打开的表过多会影响操作系统的性能。 query_cache_size: 表示查询缓冲区的大小。使用查询缓存区可以提高查询的速度。这个方式只使用与修改操作少且经常执行相同的查询操作的情况;默认值是0。 Query_cache_type: 表示查询缓存区的开启状态。0表示关闭,1表示开启。 Max_connections: 表示数据库的最大连接数。这个连接数不是越大越好,因为连接会浪费内存的资源。 sort_buffer_size: 排序缓存区的大小,这个值越大,排序就越快。 Innodb_buffer_pool_size: 表示InnoDB类型的表和索引的最大缓存。这个值越大,查询的速度就会越快。这个值太大了就会影响操作系统的性能。 当然了Mysql是一个长期的优化过程,所以在日常的运维工作中,需要不断去总结和学习。
总结
Mysql 作业
点我查看
Mysql 源码搭建教程
mysql源码安装详解
二进制安装mysql5.7.20