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日志模板


忘记密码!!!!!!!!!!!!!vim /etc/my.cnf
#跳过授权,无需密码登陆
skip-grant-tables

-----重启服务,进入mysql update更新重置密码
########################################
一、rhel7.4安装mysql5.7安装
-------------------------------------------
1.克隆一台linux作为mysql数据库服务器

2.获取包
mysql5.7

3.卸载系统预装的mariadb
查询以及安装的mariadb包
[root@localhost home]# rpm -qa | grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64

卸载
rpm -e --nodeps mariadb-libs
4.安装
解压包 并进入解压得到的目录
tar xvf mysql5.7el6.tar.gz

安装
rpm -ivh mysql-community-common-5.7.25-1.el6.i686.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el6.i686.rpm
rpm -ivh mysql-community-client-5.7.25-1.el6.i686.rpm
rpm -ivh mysql-community-server-5.7.25-1.el6.i686.rpm


5.mysql的配置文件为 /etc/my.cnf

6.mysql的服务名称 mysqld 默认端口号为 TCP 3306
systemctl restart mysqld 重启
systemctl stop mysqld 停止
systemctl start mysqld 启动
-------------------------------------------
二、启动数据库
service mysqld restart

查看数据库是否启动成功
[root@localhost ~]# netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foeign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2497/mysqld


三.初始化数据库
1.从启动日志中查找数据库的初始密码
[root@localhost mysql5.7-el6i686]# cat /var/log/mysqld.log | grep root
2019-04-24T11:38:30.872487Z 1 [Note] A temporary password is generated for root@localhost: p,iy;Sphe4xh

2.用初始密码登陆进而初始化
mysql -uroot -p

注意:
mysql -u(用户名) -p(密码) 本地登陆数据库服务器
mysql -u(用户名) -p(密码) -h(数据服务器IP) 远程登陆数据库服务器

查询数据的所有用户信息
mysql>select user,host,authentication_string from mysql.user;

3.进行设置数据库root密码<第一次不重设密码无法做任何操作>
mysql> alter user 'root'@'localhost' identified by '123456';
错误:不符合密码规则,太简单
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

mysql> alter user 'root'@'localhost' identified by 'Uplooking_123';
设置密码成功
Query OK, 0 rows affected (0.00 sec)

刷新权限操作
mysql> flush privileges;

退出
mysql> quit


==============================================================
mysql优化提高连接速度
vim /etc/my.cnf
#跳过域名反向解析
skip-name-resolve
=============================================================
!!!!重要事项
一定要记住,SQL 对大小写不敏感!sql语句必须以';'结束!

SQL DML 和 DDL
可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

查询和更新指令构成了 SQL 的 DML 部分:

SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据

SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中最重要的 DDL 语句:
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
=============================================================


第一次设置用户密码
alter user 'root'@'localhost' identified by 'Uplooking_123';

显示所有库
show databases;

创建sut_db库
create database stu_db;

删除stu_db库
drop database stu_db;

查询当前所在的database
select database();

使用mysql库
use mysql;

显示库中的所有表
show tables;

查看表person_info字段结构
desc person_info;

查看表的信息属性信息
mysql> show create table mysql.user\G

查询mysql库中的user表的所有字段
mysql> select * from mysql.user;

查询mysql库中的user表的user host password字段
mysql> select user,host,password from mysql.user;
+------------------+---------------+-------------------------------------------+
| user | host | password |
+------------------+---------------+-------------------------------------------+
| root | localhost | *2E76CE1A232154FB441CA42E96882A38D641D40B |
+------------------+---------------+-------------------------------------------+

查询user host password字段,注意 password 后未加','的pas为别名
mysql> select user,host,password pas from mysql.user;
等价
mysql> select user,host,password AS pas from mysql.user;
+------------------+---------------+-------------------------------------------+
| user | host | pas |
+------------------+---------------+-------------------------------------------+
| root | localhost | *2E76CE1A232154FB441CA42E96882A38D641D40B |
+------------------+---------------+-------------------------------------------+

查询user表的所有字段 \G将每个字段一行行显示
select * from user\G

查询user表的字段user,host,authentication_string
select user,host,authentication_string from user;
select user,host,authentication_string from user where user='root';
select user,host,authentication_string from user where user='root' and host='localhost';
select user,host,authentication_string from user where user='root' or host='localhost';
select user,host from mysql.user; -- 12345 ' 语句"--"后面的所有的内容表示注释

通过union联合其他语句,但要注意前后两条select语句查询的字段数必须一致
select user from mysql.user where 1=2 union select user from dvwa.users;

union联合select语句前后字段不一致如下报错
mysql> select user,host from mysql.user where 1=2 union select user from dvwa.users;
ERROR 1222 (21000): The used SELECT statements have a different number of columns

通过concat函数将多个字段组合为一个字段
mysql> select user,host from mysql.user union select user_id,concat(first_name,' ',last_name,' ',password) from dvwa.users;

有必要可以用常量代替字段
mysql> select user,host from mysql.user where 1=2 union select user,1 from dvwa.users;

查看当前所在库
mysql> select database();
查看当前用户
mysql> select user();

思考一下sql语句:
mysql> select * from stuInfo where uid=1 or 1=1;
mysql> select * from stuInfo where uid=1 and 1=2 union select user,host from mysql.user;
mysql> select * from stuInfo where uid=1 and 1=2 union select user(),database();
mysql> select * from stuInfo where name='marray' -- tom;
mysql> select * from mysql.user limit 1\G


授权用户abc 只能在192.168.200.0网段登陆 密码为Uplooking_123 ALL指授权所有权限
*.*指所有库中所有表
% 代表所有主机可登陆


GRANT ALL ON *.* TO 'abc'@'192.168.200.%' IDENTIFIED BY 'Uplooking_123';
GRANT ALL ON mysql.* TO 'abc'@'192.168.200.%' IDENTIFIED BY 'Uplooking_123';
GRANT ALL ON mysql.user TO 'abc'@'192.168.200.%' IDENTIFIED BY 'Uplooking_123';

刷新权限
flush privileges;

建表
create table t1(
uid int(10) NOT NULL,
name varchar(32) NOT NULL,
sex enum('男','女') NOT NULL,
PRIMARY KEY (uid)
)default charset=utf8;

向表info插入数据
insert into info(uid,name,sex) values(1,"tom","M");

查询表 所有信息
select * from info;

查询表中的uid name字段
select uid,name from info;

更改info表uid为2号的 sex 字段
update info set sex='W' where uid=2;

删除infob表中的uid为2的数据
delete from info where uid=2;



练习:
1.创建一个库 名为 test_db 在test_db中创建表 person_info 表中包含字段
编号id(int) 且id为唯一<PRIMARY KEY (uid)>
姓名(varchar)
性别(enum)
年纪(int)
2.在person_info表中插入数据
编号 姓名 性别 年纪
1 abc m 22
2 tom m 20
3 marray w 29
4 tt w 20
3.将person_info中的marray年纪修改为18

4.查询表person_info中的所有数据

5.将性别为 m 全部删除

6.删除库test_db

7.给你的数据授权一个用户uplooking 密码为Uplooking_123 该用户可以在任意主机登陆

8.mysql -uuplooking -pUplooking_123 -hIP 测试是否可远程登陆



===============================================================
mysql中information_schema详解
在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。
其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,
表栏的数据类型与访问权 限等。在INFORMATION_SCHEMA中,有数个只读表。
它们实际上是视图,而不是基本表

列出mysql数据库中的所有的表名以及其对应所在的库
mysql> select * from information_schema.TABLES\G
*************************** 632. row ***************************
TABLE_CATALOG: NULL
TABLE_SCHEMA: yazd10 ---库名
TABLE_NAME: yazdUserProp ---表名
TABLE_TYPE: BASE TABLE


数据库中所有的表及对应库
mysql> select TABLE_SCHEMA,TABLE_NAME from information_schema.tables;


将以每个database为以组列出该databases里的所有表
mysql> select table_schema,group_concat(table_name) from information_schema.tables group by table_schema\G


DISTINCT TABLE_SCHEMA对查询出来的数据库名去重,显示数据库中的所有database,等价show databases;
mysql> select DISTINCT TABLE_SCHEMA from information_schema.tables;



列出mysql库里的所有表,等价于show tables;
mysql> select table_name from information_schema.tables where table_schema='mysql';




查询数据库中的所有字段 及其对应的库和表
mysql> select * from COLUMNS \G
*************************** 4547. row ***************************
TABLE_CATALOG: NULL
TABLE_SCHEMA: yazd10 -----库名
TABLE_NAME: yazdUserProp -----表名
COLUMN_NAME: propValue -----字段名
ORDINAL_POSITION: 3 -----第几个字段


把每个表中的字段以组的形式显示出来
mysql> select table_schema,table_name,group_concat(COLUMN_NAME) from information_schema.COLUMNS group by COLUMN_NAME\G



===============================================================
实验1:mysql主从配置
主从同步原理:
在主服务器上开启二进制日志,之后当主库执行更改数据的sql语句将记录在二进制日志中。
在从库中指定主库的信息并启动从功能,此时从服务器将建立两个线程:一个sql线程与主
服务器连接监听主服务器的二进制日志是否发生变化,如果有发生变化则将变化部分日志内
容传输到从服务器并记录在中继日志中,另一个IO线程则负责将中继日志中的sql语句在数据中执行
---------------------------------------------------------------
*****在主服务上的配置:

1.授权用于 从服务器 同步的数据库用户 REPLICATION SLAVE 仅给予同步的权限
mysql> GRANT REPLICATION SLAVE on *.* to 'slave'@'192.168.110.%' identified by 'Uplooking_123';
Query OK, 0 rows affected, 1 warning (0.18 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)

mysql> show grants for 'slave'@'192.168.110.%';
+-----------------------------------------------------------+
| Grants for slave@192.168.110.% |
+-----------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.110.%' |
+-----------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

2.配置mysql数据库的配置文件

vim /etc/my.cnf

#跳过反向解析 优化连接速度
skip-name-resolve

#开启二进制功能 指定二进制日志文件
log_bin=/var/lib/mysql/mysql-bin

#设定id唯一标识 每一台mysql数据服务必须唯一
server-id=1

#关闭查询缓存提高效率
query_cache_type=OFF

#指定某些库无需同步
binlog-ignore-db=performance_schema
binlog-ignore-db=mysql
binlog-ignore-db=sys

#只同步某个库
binlog-do-db=web_db

3.保存配置文件重启 mysqld 服务器
# systemctl restart mysqld


4.给数据所有表加读锁,确保建立主从同步机制前数据无改变 ,查看当前master status
mysql> flush tables with read lock; !!!!!锁表后切记别quit 退出,退出登录自动解锁

在另外窗口给当前数据库做完全备份
[root@localhost ~]#mysqldump -uroot -pUplooking_123 --all-databases > /tmp/fully-mysql-dump.sql

查看主服务的状态信息 提供给配置从服务器的master_log_file master_log_pos选项信息
mysql> show master status;
+------------------+----------+--------------+------------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------------------+-------------------+
| mysql-bin.000002 | 1357 | | performance_schema,mysql,sys | |
+------------------+----------+--------------+------------------------------+-------------------+



*******从服务的配置
1.编辑mysql数据服务配置文件
vim /etc/my.cnf
#跳过反向解析 优化连接速度
skip-name-resolve
#服务标识号不能与主服务器相同
server-id=2
#指定中继日志
relay-log=/var/lib/mysql/relay-log

保存配置文件 重启数据库 systemctl restart mysqld

2.从主库拷贝主库的完全备份,在当前从库进行恢复,确保同步机制建立前两者数据库完全一致
[root@192 mysql]# scp 192.168.110.200:/tmp/fully_mysql_dump.sql /tmp/
[root@192 mysql]# mysql -uroot -pUplooking_123 < /tmp/fully-mysql-dump.sql

3.登陆进数据库,指定主库
#关闭从服务功能
mysql>stop slave;

#指定主服务器 其中master_log_file 及 master_log_pos为在主服务通过mysql>show master status;查看到的信息
#master_user master_password 为在主服务器中授权的账号
mysql>change master to master_host='192.168.110.200',master_user='slave',master_password='Uplooking_123',master_log_file='mysql-bin.000002',master_log_pos=154;
#启动从功能
mysql>start slave;

#查看从状态
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.110.200
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 1357
Relay_Log_File: mysql-2-relay-bin.000003
Relay_Log_Pos: 1523
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes 注意当前两个线程的YES即为主从成功
Slave_SQL_Running: Yes


##################################################
关于从服务器的相关sql语句:
mysql>stop slave; 停止从机制
mysql>start slave; 查看从机制
mysql>reset slave; 重置从机制的配置
mysql>show slave status\G 查看从机制状态
##################################################
主从机制建立完毕后,解除主库的 读锁
mysql> unlock tables;

==================================================
注意事项:
1.关闭所有服务器的防火墙
2.在配置从服务时,不要对主服务器做任何更改
3.如果发现在配置从服务器 mysql>change master to 时错误
则可以用mysql>reset slave;清除之前的 从 配置,再重新配置
4.用sql语句在主服务器 增 删 或 改 数据 然后在从服务器查看是否一致

===================================================