images\cherry_red.png1 实训二前期LNMP简易架构
      images\cherry_blue.png1.1 php server安装
      images\cherry_blue.png1.2 安装初始化数据库
   images\cherry_red.png2 Mysql数据库
      images\cherry_blue.png2.1 Mysql5.7安装
         images\cherry_orange.png2.1.1 rpm安装
         images\cherry_orange.png2.1.2 yum安装
         images\cherry_orange.png2.1.3 源码安装
         images\cherry_orange.png2.1.4 编译好的非rpm包安装
         images\cherry_orange.png2.1.5 my.cnf常见选项
      images\cherry_blue.png2.2 Mysql基础
         images\cherry_orange.png2.2.1 MySql数据库操作
         images\cherry_orange.png2.2.2 MySql数据类型
            images\cherry_cyan.png2.2.2.1 整型
            images\cherry_cyan.png2.2.2.2 浮点数和定数
            images\cherry_cyan.png2.2.2.3 字符串类型
            images\cherry_cyan.png2.2.2.4 日期和时间类型
            images\cherry_cyan.png2.2.2.5 字段修饰和约束
            images\cherry_cyan.png2.2.2.6 业务建表练习
         images\cherry_orange.png2.2.3 MySql表操作
         images\cherry_orange.png2.2.4 MySql体系结构
         images\cherry_orange.png2.2.5 MySql存储引擎
      images\cherry_blue.png2.3 MySql操作
         images\cherry_orange.png2.3.1 MySql数据操作
         images\cherry_orange.png2.3.2 MySql单表查询
         images\cherry_orange.png2.3.3 MySql多表查询
         images\cherry_orange.png2.3.4 MySql存储过程与函数
      images\cherry_blue.png2.4 MySql操作-2
         images\cherry_orange.png2.4.1 MySql安全机制
         images\cherry_orange.png2.4.2 MySql日志管理
         images\cherry_orange.png2.4.3 MySql复制概述
         images\cherry_orange.png2.4.4 主从同步
      images\cherry_blue.png2.5 最基本sql语句及主从架构
      images\cherry_blue.png2.6 MyCat中间件
         images\cherry_orange.png2.6.1 部署Mycat
         images\cherry_orange.png2.6.2 配置读写分离
            images\cherry_cyan.png2.6.2.1 安全的读写分离
         images\cherry_orange.png2.6.3 XML语法格式
         images\cherry_orange.png2.6.4 mycat 分表分库
      images\cherry_blue.png2.7 Mysql MHA
         images\cherry_orange.png2.7.1 MHA-部署
         images\cherry_orange.png2.7.2 MHA-故障切换VIP透明
            images\cherry_cyan.png2.7.2.1 VIP切换脚本内容
            images\cherry_cyan.png2.7.2.2 VIP-手动在线切换脚本
         images\cherry_orange.png2.7.3 MHA+Mycat高可用Mysql读写分离
         images\cherry_orange.png2.7.4 MHA+VIP+Mycat
         images\cherry_orange.png2.7.5 MHA-故障切换邮件报警
         images\cherry_orange.png2.7.6 自动配置Slave主机
   images\cherry_red.png3 实验
      images\cherry_blue.png3.1 mysql授权问题
      images\cherry_blue.png3.2 1.单节点数据库
      images\cherry_blue.png3.3 2.主从同步
      images\cherry_blue.png3.4 3.实验(高可用)
         images\cherry_orange.png3.4.1 高可用keepalived
            images\cherry_cyan.png3.4.1.1 keepalived install
      images\cherry_blue.png3.5 4.实验(高可用+大并发)
         images\cherry_orange.png3.5.1 HAproxy代理
      images\cherry_blue.png3.6 4.实验(mycat-读写分离)
         images\cherry_orange.png3.6.1 mycat安装部署
         images\cherry_orange.png3.6.2 读写分离高可用
         images\cherry_orange.png3.6.3 mycat管理端口命令
      images\cherry_blue.png3.7 5.双主双从-读写分离-高可用
      images\cherry_blue.png3.8 6.mycat分库操作
      images\cherry_blue.png3.9 7.mycat分表
      images\cherry_blue.png3.10 8.mycat分库分表之下实现读写分离
   images\cherry_red.png4 Shell脚本编程
   images\cherry_red.png5 Zabbix监控
      images\cherry_blue.png5.1 zabbix设置邮件报警--自定义报警媒介
      images\cherry_blue.png5.2 zabbix解决中文界面乱码问题
      images\cherry_blue.png5.3 ziabbix自带的template Linux OS
      images\cherry_blue.png5.4 zabbix-agent自定义收集数据
      images\cherry_blue.png5.5 zabbix监控Nginx性能
      images\cherry_blue.png5.6 综合配置
      images\cherry_blue.png5.7 实验:监控nginx端口实现告警
   images\cherry_red.png6 ELK日志分析
      images\cherry_blue.png6.1 PS
      images\cherry_blue.png6.2 es-head插件安装
      images\cherry_blue.png6.3 安装filebeat nginx日志模板

一、数据库的基本介绍


什么是数据库? 数据---记录---存储 分析---结果---决策

# 目前人类社会中最具有价值的东西 ------ 数据
# 数据怎么产生的 ---- 如何采集 ---- 如何传输 ----- 如何存放 ----- 如何管理---(如何提供高效查询)


从前的人们如何采集数据? 又是如何存放数据的呢? 计算机===》 文件系统===》 文件 access.log ===》磁盘


意识---符号-----图画------文字-----文明
------------------------
|
载体, 岩石,泥土,金属,木板,竹子,造纸,磁带,磁盘(无序存储,文件分类存储,专用数据软件有序有规则存储)



什么叫 数据库(database)?

1 存储数据的容器。
2 数据库(database): 保存有组织的数据的容器 (通常是一个文件或一组文件)。
3 数据库(Database) 是按照数据结构来组织、存储和管理数据的仓库
4 严格来说,数据库是长期储存在计算机内、有组织的、可共享的数据集合。
数据库中的数据指的是以一定的数据模型组织、描述储存在一起、具有尽可能小的冗余度、较高的数据独立性和易扩展性的特点并可
在一定范围内为多个用户共享。


什么叫 数据库管理系统 ( DataBase Management System DBMS)? ==================

数据库管理系统(DBMS): 顾名思义,既然是数据管理系统,就是用来管理数据的数据库软件


2017年1月份前20名数据库引擎排名。 去 I O E

images\10-1.png



数据库产品的行业占比及排名:

1. Oracle:金融、通信、生产制造、快速消费品零售、物流运输、医疗、互联网、政府;
2. DB2:金融为主;
3. Sybase:金融、通信、政府 为主;
4. SQL Server:政府、生产制造、快速消费品零售、医疗、互联网为主;
5. MySQL:互联网为主近2年开始扩展到 金融、通信、生产制造、快速消费品零售、物流运输、医疗、政府等行业;

国内的金融领域像基金公司、证券公司、中国银联、银行业都在尝试 去IOE,使用 MySQL + X86 主机;
三大电信运营商,也在大力推动 去IOE,且已有众多大型项目上线
广播电视、生产制造、物流运输、快速消费品零售都在大力 去IOE,且也有多个重大项目上线






Mysql 与 MariaDB

mysql 的前世与今生:
images\10-2.png

MySQL的海豚标志的名字叫 “sakila”,代表速度、力量、精确。
它是由MySQL AB的创始人 Michael Monty Widenius 米切尔,威尔德斯, 从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。
“My”来自Monty女儿的名字,而 “SQL” 就是结构化查询语言(Structured Query Language)的意思,是一种跟数据库沟通的语言。

MySQL AB 最初是由David Axmark、Allan Larsson和Michael“Monty”Widenius在瑞典创办的。

images\10-3.png


RHEL 7 MariaDB

Monty是一位编程天才。19岁的时候,他从赫尔辛基理工大学辍学开始全职工作,因为大学已经没有什么东西可以教他了。
在独自一人写完除了一个库以外的全部代码之后,33岁时,他发布了MySQL,后来后者成为了全世界最流行的开源数据库。
55岁时,他藐视着对老年人的歧视,仍然是自己公司最好的程序员。



MySQL的历史最早可以追溯到 1979 年,那时 Oracle 也才小打小闹,微软的SQL Server影子都没有。
有一个人叫Monty Widenius, 为一个叫TcX的小公司打工,并用BASIC设计了一个报表工具,可以在4M主频和16KB内存的计算机上运行。
过了不久,又将此工具,使用 C语言重写,移植到Unix平台,当时,它只是一个很底层的面向报表的存储引擎。这个工具叫做Unireg。
可是,这个小公司资源有限,Monty天赋极高,面对资源有限的不利条件,他反而更能发挥潜能,总是力图写出最高效的代码。
并因此养成了习惯。与Monty同在一起的还有一些别的同事,很少有人能坚持把那些代码持续写到20年后,而Monty却做到了。

1990年,TcX的customer 中开始有人要求要为它的API提供 SQL支持,当时,有人想到了直接使用商用数据库算了,但是Monty觉得商用
数据库的速度难令人满意。于是,他直接借助于mSQL的代码,将它集成到自己的存储引擎中。但不巧的是,效果并不太好。
于是, Monty雄心大起,决心自己重写一个SQL支持。

1996年,MySQL 1.0发布,只面向一小拨人,相当于内部发布。

1996年10月,MySQL 3.11.1发布了。 最开始,只提供了Solaris下的二进制版本。一个月后, Linux版本出现了。。

MySQL3.22是一个标志性的版本,提供了基本的 SQL支持。

MySQL关系型数据库于 1998年1月发行第一个版本。它使用系统核心提供的多线程机制提供完全的多线程运行模式,
提供了面向 C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等编程语言的编程接口(APIs),支持多种字段类型
并且提供了完整的操作符支持查询中的SELECT和WHERE操作。

1999-2000年,有一家公司在瑞典成立了,叫 MySQL AB (AB是瑞典语“股份公司”的意思)。 开发出了 Berkeley DB引擎, 因为BDB支持事务处理,
所以,MySQL从此开始支持事务处理了。

2000年4月,MySQL对旧的 存储引擎 进行了整理,命名为 MyISAM
2001年,Heikiki Tuuri 向 MySQL提出建议,希望能集成他们的 存储引擎 InnoDB,这个引擎同样支持事务处理,还支持行级锁。
MySQL与InnoDB的正式结合版本是 4.0。

到了MySQL5.0,2003年12月,开始有View,存储过程之类的东东,其间,bug也挺多。

在2008年1月16号 MySQL 被 Sun 公司 收购。

MySQL的创始人 Monty Widenius 则选择离开 Sun公司另求出路。
据说,被Sun收购的公司多薄命,不知道MySQL今后前途如何。

在Sun被 Oracle 收购之后,Monty 成立了MariaDB,这是MySQL的一个社区版的分支,开发的团队成员很多都是MySQL团队里面的,
使用的也是一样的官方语言:“蹩脚的英语”。MySQL的许多热心的开源信徒跟着Monty去到了MariaDB。MariaDB更加面向开发者,
允许由外人打补丁这样的事情发生,在很多Linux发行版中它都是默认的数据库。



images\10-4.png


==开源 与 闭源 =============

介绍 open source 和 closed source 的概念和区别,
open source和他相对应的就是闭源closed source应用,
闭源的东西又叫做 copyright(版权、著作权),
微软的东西一般都是 copyright;而开源的叫做 copyleft(非盈利版权,公共版权)。 格奴 GNU GPL


收购mysql的是当时比较著名的sun公司,有很多非常经典的产品都是sun开发出来的,比如他的java编程语言。
除了java语言以外sun公司还开发过很多经典的技术,sun公司有钱有实力,但是由于经营的问题,最后就倒闭了,
然后被oracle收购,现在mysql所属于oracle。

== IT界的革命,去 IOE。============

三个非常著名的公司,IBM、ORACLE、EMC,
这三个公司有业界一流的产品,IBM 有他的小型机,从服务器的性能上来讲小型机已经算是顶尖的,比你的pc server要好的多;
然后Oracle的数据业界顶尖的;
EMC 的存储设备也是业界顶尖的。


Maria DB 的出现


MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以 10亿美元 的价格,
将自己创建的公司MySQL AB卖给了 SUN,此后,随着SUN被甲骨文收购,MySQL 的所有权也落入Oracle的手中。

MariaDB 名称来自 Michael Widenius 的女儿 Maria的名字。


images\10-5.png


2009年,MySQL之父Michael “Monty” Widenius用他的新项目 MariaDB 完成了对 MySQL的 “反戈一击”。
开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将 MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。

过去一年中,大型互联网用户以及Linux发行商 纷纷抛弃 MySQL,转投MariaDB阵营。
MariaDB 是目前最受关注的 MySQL 数据库衍生版,也被视为开源数据库MySQL的替代品。

MariaDB 虽然被视为 MySQL 数据库的替代品,但它在扩展功能、存储引擎以及一些新的功能改进方面都强过MySQL。

而且从MySQL迁移到 MariaDB 也是非常简单的:

1、数据和表定义文件(.frm)是二进制兼容的
2、所有客户端API、协议和结构都是完全一致的
3、所有文件名、二进制、路径、端口等都是一致的
4、所有的 MySQL连接器,比如PHP、Perl、Python、Java、.NET、MyODBC、Ruby以及MySQL C connector等在MariaDB中都保持不变
5、mysql-client包在MariaDB服务器中也能够正常运行。 mysql
6、共享的客户端库与MySQL也是二进制兼容的

也就是说,在大多数情况下,你完全可以卸载MySQL然后安装MariaDB,然后就可以像之前一样正常的运行

所以可以很方便地从 mysql 的环境迁移到 mariadb上面。

maraidb也做的非常好,刚开始比不过mysql,但是近两年mysql有的优点他都有,
甚至他还有很多自己专有的优点。



MariaDB 提供以下特性: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

5.1 InnDB 2.5倍

Percona XtraDB Percona DB Mysql 开源分支 ===== MariaDB PerconaDB
XtraDB
InnoDB

XtraDB 替换 InnoDB,XtraDB 是 Percona 开发维护的 InnoDB 威力加强版,整合 Google、Facebook 等公司和 MySQL 社区的补丁。
• Aria 存储引擎 和 Sphinx 存储引擎
• 基于 Gelera Cluster 的 MariaDB 集群方案
多主复制(将在 MariaDB 10.0 实现,由淘宝贡献)
Cassandra 存储引擎(将在 MariaDB 10.0 实现)

Aria(原名Maria) 存储引擎:原先 MyISAM 引擎的取代品。

XtraDB 存储引擎
Percona XtraDB 是 InnoDB 存储引擎的增强版,被设计用来更好的使用更新计算机硬件系统的性能,同时还包含有一些在高性能环境下的新特性。

XtraDB 存储引擎是完全的向下兼容,在 MariaDB 中,XtraDB 存储引擎被标识为"ENGINE=InnoDB",这个与 InnoDB 是一样的,
所以你可以直接用XtraDB 替换掉 InnoDB 而不会产生任何问题。
Percona XtraDB 包含有所有 InnoDB's 健壮性,可依赖的 ACID 兼容设计和高级 MVCC 架构。
XtraDB 在 InnoDB 的坚实基础上构建,使 XtraDB 具有更多的特性,更好调用,更多的参数指标和更多的扩展。
从实践的角度来看,XtraDB 被设计用来在多核心的条件下更有效的使用内存和更加方便,更加可用。
新的特性被用来降低 InnoDB 的局限性。
MariaDB 对存储引擎新特性的选择基于用户的需求和现实环境中的真实需求。

• 更快的复制查询处理
• 线程池
• 更少的警告和bug
• 运行速度更快
• 多的 Extensions (More index parts, new startup options etc)
• 更好的功能测试
• 数据表消除
• 慢查询日志的扩展统计
• 支持对 Unicode 的排序




数据表(二维表):


数据库 =====》 数据表 =======》 数据
database table data record
|
二维表(列(字段),行(记录))
| |
Filed Row


images\10-6.png



数据库 ====》 目录
数据表 ====》 文件(多个文件构成)|
|===》决定于存储引擎MyISAM InnoDB) 表结构 students.frm 附件属性 db.opt 数据 ibdata1(共享表空间)
具体的某条数据====》 在某个文件。 | |
|
a.MYI a.MYD a.frm
|
索引,数据,表结构





快速安装及初始化设置 MariaDB CentOS 7/Redhat7

[root@class2 ~]# yum list | grep mariadb
mariadb.x86_64 1:5.5.56-2.el7 @base
mariadb-libs.x86_64 1:5.5.56-2.el7 @anaconda
mariadb-server.x86_64 1:5.5.56-2.el7 @base
mariadb-bench.x86_64 1:5.5.56-2.el7 base
mariadb-devel.x86_64 1:5.5.56-2.el7 base
mariadb-test.x86_64 1:5.5.56-2.el7 base

[root@class2 ~]# yum install mariadb*

建立mysql 专用的 运行用户,RPM 版本可以省略这一步:

groupadd mysql
useradd -u 27 mysql -g mysql


初始化数据库:RPM 版本可以忽略:

数据库: 目录
数据表: 几个文件共同组成
数据 : 包含在数据文件中


如果不自定义目录,则初始化的数据库,默认放置在 /var/lib/mysql
|
[root@class2 mydb]# mysql_install_db --datadir=/mysql --user=mysql
## 对 /mydb 目录,确保 mysql 用户具有读写权限 ## 后续要创建 socket 套件字文件。
[root@class2 mydb]# chown -R mysql * ### 确保mysql用户对 mysql 的组件有读写权限
[root@class2 mydb]# ll
total 28700
-rw-rw---- 1 mysql mysql 16384 Jan 7 21:19 aria_log.00000001 ##二进制日志
-rw-rw---- 1 mysql mysql 52 Jan 7 21:19 aria_log_control ##日志控制文件
-rw-rw---- 1 mysql mysql 18874368 Jan 7 21:19 ibdata1 ## 共享表空间文件(数据和索引 frm 文件存放表的描述)
-rw-rw---- 1 mysql mysql 5242880 Jan 7 21:19 ib_logfile0 ##innodb引擎的事务日志 也叫 redo 日志
-rw-rw---- 1 mysql mysql 5242880 Jan 7 21:19 ib_logfile1
drwx------ 2 mysql mysql 4096 Jan 7 21:19 mysql ##默认创建的mysql运行配置数据库
srwxrwxrwx 1 mysql mysql 0 Jan 7 21:19 mysql.sock ## 套接字文件,随服务的启动而 建立和 消亡
drwx------ 2 mysql mysql 4096 Jan 7 21:19 performance_schema ## 性能概要数据库, 可以通过调整该 数据库表中的值, 进而调整数据库运行性能
drwx------ 2 mysql mysql 6 Jan 7 21:19 test ## 默认创建的 Test 数据库, 空库

## 服务启动后,还会动态生成一个 information_schema 数据库,默认存放 数据库启动后的运行状态信息,供查询和实时调整。



修改配置文件 : /etc/my.cnf

[root@server-17 /mysql]# cat /etc/my.cnf

[mysql]
socket=/mysql/mysql.sock

[mysqld]
datadir=/mysql
socket=/mysql/mysql.sock
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

!includedir /etc/my.cnf.d



启动服务: ----------------------------------------------

systemctl start mariadb

检测端口: netstat -ntl 3306

## rpm 版本的数据库,直接启动服务的话,会默认帮我们完成 创建用户和初始化数据库的步骤


客户端工具: ----------------------------------------------


[root@class2 data]# mysql ## 登录,默认管理员没有密码,可以直接登录。

Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>


速度上手,mysql 客户端 简易操作指令:------------------------------------------


MariaDB [(none)]> 客户端工具 没有 tab 键
ctrl + a
ctrl + e
右ctrl + L 清屏
sql 语句默认都以 ; 为语句结束。
命令历史记录,上下键 ------------- mysql 命令历史记录 /root/.mysql_history


数据库 ----- 表 (行,列,字段) --------记录(数据)

show databases; 查看所有数据库
use XXXX; 使用/进入 某个数据库
show tables; 查看表
show variables; 查看当前变量信息
show variables like “%innodb%”; 模糊查询变量信息
show variables like “%version%” \G 格式化输出信息,按行显示,更整齐


desc table-name; 查看表的结构
select * from table-name; 查看表中的数据 select 字段 from 数据库.表
select * from data.table; 例子: select user,host,password from mysql.user;
|
|
显示表中的所有字段。






修改数据库的 root 密码 :-------------------------------------------------------

### 默认创建了4个root用户,2个匿名用户,注意 Host 的不同,且密码全为空

MariaDB [mysql]> select Host,user,password from mysql.user;

MariaDB [myclass]> SELECT host,user,password FROM mysql.user; ### SQL 语句大写,标准要求!

images\10-7.png




## 使用update 语句更新root 密码 =================================


MariaDB [mysql]> UPDATE mysql.user SET Password=password('123123') WHERE User="root" AND Host="localhost";

Query OK, 1 row affected (0.01 sec) |
Rows matched: 1 Changed: 1 Warnings: 0 password 函数

MariaDB [mysql]> delete from mysql.user where password=""; ##删除所有密码为空的 其他记录。

MariaDB [mysql]> SELECT Host,user,password FROM mysql.user;

images\10-8.png


MariaDB [mysql]> flush privileges; FLUSH PRIVILEGES; ##只要修改了权限表,可以 立刻刷新权限表生效


### 退出,再次登录时验证:

[root@class2 ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)


[root@class2 ~]# mysql -uroot -p ## 键入密码后才可以登录
Enter password:


## mysql 客户端工具登录时完整用法

mysql -u用户名 -h主机名 -p明文密码 -P端口 -S套接字

例如: mysql -uroot -p123123 -h192.168.2.19 -P3306 -S/tmp/mysql.socket


#########################
mysql.sock mysql.pid
随着服务的启动,自动创建,服务停止,自动删除。




迁移数据库,从默认的 /var/lib/mysql 迁移至 /mysql

===1、 停止数据库 systemctl stop mariadb
===2、 mv /var/lib/mysql/* /mysql
rm -rf /mysql/lost+found

## 注意,迁移 后的 所有文件,保证 mysql 用户可以 读 + 写

===3、修改 新的 数据库目录,保证 mysql 可以读写

chown mysql:mysql /mysql

===4、修改主配置文件 /etc/my.cnf

[root@server-13 var]# cat /etc/my.cnf

[client]
password=123123
socket=/mysql/mysql.sock

[mysqld]
datadir=/mysql ## 数据库目录
socket=/mysql/mysql.sock ## 套接字生成位置。
user=mysql ## 运行的身份依据
symbolic-links=0

log-error=/var/log/mariadb/mariadb.log ## 错误日志所在
pid-file=/var/run/mariadb/mariadb.pid ##PID 文件,存放 进程号。

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

### 由于项目中对一些默认值设置问题,以及种种原因,mysql数据库需要使用非严格模式开发(mysql最近的版本默认是开启严格模式的)。


=== 5、启动 ,停止,重载 mysql服务 。


[root@server-13 var]# cat /test/mysqld.sh

#!/bin/bash

start(){
/usr/libexec/mysqld &
}
stop(){
killall mysqld
}
reload(){
kill -hup `cat /var/run/mariadb/mariadb.pid`
}

case "$1" in

start)
start
;;
stop)
stop
;;
reload)
reload
;;
*)
echo "usage: start | stop | reload"
esac


===6、测试,验证

netstat -ntl 能看到 3306 端口

要求:使用 mysql -uroot 的方式,即可以登录新的数据库实例。





在 shell中 直接操作 数据库,非交互式 mysql -e 选项 ----------------------------------------------

mysql -hlocalhost -uroot -p123123 -e "show databases; " ##别忘记分号,里面是一个完整的 sql 语句。


[root@class2 mysql]# mysql -uroot -p123123 -e "show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| orders |
| performance_schema |
| test |
+--------------------+

#### 这种方式有风险,root 密码会明文的 暴露,解决方法: 使用 my.cnf 主配置文件中的 [ client ] 配置段;

编辑主配置文件 :
[root@class2 mysql]# vim /etc/my.cnf

在配置文件首部添加如下两行 ,mysql 客户端工具默认会读取 这个文件的 client 配置段:
[mysql]
password=123123
socket=/mydb/mysql.sock


[root@class2 mysql]# chown mysql /etc/my.cnf
[root@class2 mysql]#
chmod 400 /etc/my.cnf ##将改文件保护起来,不让别人轻易读取明文密码。

[root@class2 mysql]# ll /etc/my.cnf
-r-------- 1 mysql root 595 Jan 7 23:57 /etc/my.cnf




使用shell 脚本操作 数据库 EOF 方式逐条 导入

### 前提,已经设置好 mysql 的root 密码,并将密码加入到了 my.cnf 中

例如:

前提是密码已经存入 /etc/my.cnf [mysql] 段中。

#!/bin/bash

mysql -uroot <<EOF
show databases;
select user,password,host from mysql.user;
show variables like "%version%";

EOF




利用shell 脚本 导入范例数据库,方便观察和测试:---------------------------------------------------


create table 表名 ( 字段1 属性1 属性2 属性3, 字段2 属性2 属性3 ) 引擎 字符编码

#!/bin/bash

USER="root"
DB="new_data"
TB="product"

##########################
mysql -u$USER << EOF
drop database $DB;
CREATE DATABASE $DB;
use $DB;


CREATE TABLE $TB (
id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '表主键',
产品ID int(10) unsigned NOT NULL ,
价格 decimal(15,2) NOT NULL,
购买数量 int(11) NOT NULL ,
客户姓名 varchar(255) NOT NULL ,
下单时间 varchar(30) NOT NULL ,
修改时间 int(10) unsigned NOT NULL ,
用户状态 tinyint(4) NOT NULL DEFAULT '0' COMMENT '用户状态标记',
年份 smallint(5) unsigned NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO $DB.$TB (产品ID,价格,购买数量,客户姓名,下单时间,修改时间,年份) VALUES ('1', '123.54', '1', '诸葛亮', now(), '$RANDOM','2015');
INSERT INTO $DB.$TB (产品ID,价格,购买数量,客户姓名,下单时间,修改时间,年份) VALUES ('33', '180.00', '2', '曹操', now(), '$RANDOM','2016');
INSERT INTO $DB.$TB (产品ID,价格,购买数量,客户姓名,下单时间,修改时间,年份) VALUES ('1434', '280.00', '3', '刘备', now(), '$RANDOM','2018');

EOF