1 实训二前期LNMP简易架构 1.1 php server安装 |
1.2 安装初始化数据库 |
2 Mysql数据库 |
2.1 Mysql5.7安装 |
2.1.1 rpm安装 |
2.1.2 yum安装 |
2.1.3 源码安装 |
2.1.4 编译好的非rpm包安装 |
2.1.5 my.cnf常见选项 |
2.2 Mysql基础 |
2.2.1 MySql数据库操作 |
2.2.2 MySql数据类型 |
2.2.2.1 整型 |
2.2.2.2 浮点数和定数 |
2.2.2.3 字符串类型 |
2.2.2.4 日期和时间类型 |
2.2.2.5 字段修饰和约束 |
2.2.2.6 业务建表练习 |
2.2.3 MySql表操作 |
2.2.4 MySql体系结构 |
2.2.5 MySql存储引擎 |
2.3 MySql操作 |
2.3.1 MySql数据操作 |
2.3.2 MySql单表查询 |
2.3.3 MySql多表查询 |
2.3.4 MySql存储过程与函数 |
2.4 MySql操作-2 |
2.4.1 MySql安全机制 |
2.4.2 MySql日志管理 |
2.4.3 MySql复制概述 |
2.4.4 主从同步 |
2.5 最基本sql语句及主从架构 |
2.6 MyCat中间件 |
2.6.1 部署Mycat |
2.6.2 配置读写分离 |
2.6.2.1 安全的读写分离 |
2.6.3 XML语法格式 |
2.6.4 mycat 分表分库 |
2.7 Mysql MHA |
2.7.1 MHA-部署 |
2.7.2 MHA-故障切换VIP透明 |
2.7.2.1 VIP切换脚本内容 |
2.7.2.2 VIP-手动在线切换脚本 |
2.7.3 MHA+Mycat高可用Mysql读写分离 |
2.7.4 MHA+VIP+Mycat |
2.7.5 MHA-故障切换邮件报警 |
2.7.6 自动配置Slave主机 |
3 实验 |
3.1 mysql授权问题 |
3.2 1.单节点数据库 |
3.3 2.主从同步 |
3.4 3.实验(高可用) |
3.4.1 高可用keepalived |
3.4.1.1 keepalived install |
3.5 4.实验(高可用+大并发) |
3.5.1 HAproxy代理 |
3.6 4.实验(mycat-读写分离) |
3.6.1 mycat安装部署 |
3.6.2 读写分离高可用 |
3.6.3 mycat管理端口命令 |
3.7 5.双主双从-读写分离-高可用 |
3.8 6.mycat分库操作 |
3.9 7.mycat分表 |
3.10 8.mycat分库分表之下实现读写分离 |
4 Shell脚本编程 |
5 Zabbix监控 |
5.1 zabbix设置邮件报警--自定义报警媒介 |
5.2 zabbix解决中文界面乱码问题 |
5.3 ziabbix自带的template Linux OS |
5.4 zabbix-agent自定义收集数据 |
5.5 zabbix监控Nginx性能 |
5.6 综合配置 |
5.7 实验:监控nginx端口实现告警 |
6 ELK日志分析 |
6.1 PS |
6.2 es-head插件安装 |
6.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语句在主服务器 增 删 或 改 数据 然后在从服务器查看是否一致
===================================================
|