数据库学习day02:多实例部署及MySQL简单配置管理及列属性

跨版本升级

注意事项 1.不要跨多个版本 2.看好版本

开发私下找你要root管理员权限

银行:
走流程.一般需要审核,背景调查.
举报他.
中小公司:
权利和责任全给他,通过正常的流程.

思考: 开发找你开权限的流程是怎样?

(1) 邮件申请
(2) 权限
(3) 从哪来
(5) 业务库
(6) 谁来审批

grant 权限 on 权限范围 to 用户@'dizhi' identified by '密码';

1. MySQL的连接管理

1.1 MySQL Linux 连接协议

Socket : 本地登录,提前创建好localhost相关用户
TCP/IP : 远程登录,提前创建好 远程用户.

1.2 MySQL客户端

两种连接方式
[root@db01 ~]#mysql -uroot -p -S /tmp/mysql.sock
[root@db01 ~]#mysql -udamao -p -h10.0.0.51 -P3306

注意:

 1.  不要连接时把密码写到命令行上
 2.  脱敏 敏感数据进行打码处理

Windows连接数据库

利用软件实现
sqlyog
navicat

2. MySQL的启动关闭

2.1 利用Sys-V的方式启动

service mysqld start/stop/restart/status

2.2 利用systemd的管理程序启动

systemctl start/stop/restart/status mysqld

2.3 手动启动方式(维护性操作时)

注意:无论是sys-V还是systemd的方式启动,最后都是调用的MySQL服务端的mysqld这个二进制命令启动程序

image.png

#sys-V
/etc/init.d/mysqld -----> /usr/local/mysql/bin/mysqld_safe  ----> /usr/local/mysql/bin/mysqld

#systemd
[root@db01 ~]#systemctl cat mysqld.service 
# /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld--defaults-file=/etc/my.cnf
LimitNOFILE = 5000
[root@db01 ~]#

\color{red}{我是红色}

例子:管理员用户root@'localhost',密码丢失
(1)通过跳过授权表参数+TCP/IP的参数,启动数据库

--skip-grant-tables   : 跳过授权表,连接层关闭验证模块.
--skip-networking     : 关闭连接层TCP/IP,只留socket文件连接

(2)无密码登录到MySQL
(3)修改密码

damao[(none)]>alter user root@'localhost' identified by '123';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

#发现更改不了密码,因为跳过了授权表,所以无法更改密码,需要手动刷新将授权表加载到内存中,再更改密码。

damao[(none)]>flush privileges;
Query OK, 0 rows affected (0.05 sec)

damao[(none)]>alter user root@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)

damao[(none)]>

(4)将数据库pkill,再正常启动数据库。

2.5MySQL的其他关闭方式

[root@db01 ~]#mysqladmin -uroot -p -S /tmp/mysql.sock shutdown
Enter password: 
2019-11-12T12:47:05.079904Z mysqld_safe mysqld from pid file /data/mysql/data/db01.pid ended
[1]+  Done                    mysqld_safe --skip-grant-tables --skip-networking
[root@db01 ~]#

初始化配置

3.0 初始化配置方式 配置生效的优先级

(1) 配置文件 *****
(2) 命令行 ***
(3) 编译安装 *

3.1 配置文件默认读取数据

[root@db01 ~]#mysqld --help --verbose|grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 
                      my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default
**配置文件的读取是依照上面列出的顺序依次读取,配置参数相同但是参数值不同时,最后读取的文件的配置生效,配置参数不同,依次累加。**

自己定义的默认配置
利用mysqld_safe或mysqld命令启动数据库,或者更改systemd管理的配置文件
使用参数 --defaults-file=配置文件路径
mysqld_safe --defaults-file=/tmp/my.cnf

3.2 配置文件内容

3.2.1 影响范围

服务端启动和工作
本地客户端连接(socket)

3.2.2 内容结构

[root@db01 ~]#cat /etc/my.cnf
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/mysql/data
log_error=/data/mysql/mysql.log
socket=/tmp/mysql.sock
port=3306
server_id=51
log_bin=/data/binlog

[mysql]
socket=/tmp/mysql.sock
prompt=damao[\\d]>

[标签]
配置项=xxxx

标签类型:服务端、客户端
服务器端标签:
[mysqld]
[mysqld_safe]
[server]

客户端标签:
[mysql]
[mysqldump]
[client]

4. 多实例

4.1 规划

(1) 端口 : 3307,3308,3309 
(2) 数据 : /data/330{7..9}/data 
(3) 配置文件: 
/data/330{7..9}/my.cnf  
port=3307/3308/3309
server_id=7/8/9
datadir=/data/330{7..9}/data socket=/tmp/mysql330{7..9}.sock 

4.2 进行操作

(1)创建相关目录
mkdir -p /data/330{7..9}/data
(2)初始化数据
[root@db01 /data]# mv /etc/my.cnf /tmp #将默认配置文件移走
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data
(3)准备配置文件

cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/app/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7
log_bin=/data/3307/binlog
EOF

cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/app/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8
log_bin=/data/3308/binlog
EOF

cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/app/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9
log_bin=/data/3309/binlog
EOF

(4)准备启动脚本

cat > /etc/systemd/system/mysqld3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF

cat > /etc/systemd/system/mysqld3308.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
EOF

cat > /etc/systemd/system/mysqld3309.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF

(5)启动多实例及验证
systemctl start mysql3307.service

[root@db01 ~]#netstat -lntup|grep mysqld
tcp6       0      0 :::3307                 :::*                    LISTEN      10327/mysqld        
tcp6       0      0 :::3308                 :::*                    LISTEN      10361/mysqld        
tcp6       0      0 :::3309                 :::*                    LISTEN      10395/mysqld

\color{red}{**小作业**:} 利用mysql_multi 实现多实例环境
参考 : https://dev.mysql.com/doc/refman/5.7/en/mysqld-multi.html
(1)准备环境

mkdir /data/330{4,5}/data -p
chown -R mysql. /data/330{4,5}

(2)初始化数据

mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3304/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3305/data

(3)配置/etc/my.cnf 文件

[root@db01 ~]#cat /etc/my.cnf
[mysql_multi]
mysqld = /application/mysql/bin/mysqld
mysqladmin = /application/mysql/bin/mysqladmin
log = /data/mysqld_multi.log
user = root
pass = 123

 
[mysqld3304]
user = mysql
mysqladmin = /application/mysql/bin/mysqladmin
mysqld = /application/mysql/bin/mysqld
port = 3304
socket = /tmp/mysql3304.sock
datadir = /data/3304/data
log_error=/data/3304/mysql.log
server-id = 51
 
[mysqld3305]
user = mysql
mysqladmin = /application/mysql/bin/mysqladmin
mysqld = /application/mysql/bin/mysqld
port = 3305
socket = /tmp/mysql3305.sock
log_error=/data/3305/mysql.log
datadir = /data/3305/data
server-id = 52

(4)启动并查看状态

[root@db01 ~]#mysqld_multi start  3305 
WARNING: Log file disabled. Maybe directory or file isn't writable?
mysqld_multi log file version 2.16; run: Tue Nov 12 23:50:37 2019

Starting MySQL servers
[root@db01 ~]#mysqld_multi start  3304
WARNING: Log file disabled. Maybe directory or file isn't writable?
mysqld_multi log file version 2.16; run: Tue Nov 12 23:50:41 2019

Starting MySQL servers
[root@db01 ~]#mysqld_multi report  3304,3305
WARNING: Log file disabled. Maybe directory or file isn't writable?
mysqld_multi log file version 2.16; run: Tue Nov 12 23:50:57 2019
Reporting MySQL servers
MySQL server from group: mysqld3304 is running
MySQL server from group: mysqld3305 is running
[root@db01 ~]#netstat -lntup|grep mysqld
tcp6       0      0 :::3304                 :::*                    LISTEN      9628/mysqld         
tcp6       0      0 :::3305                 :::*                    LISTEN      9594/mysqld         
tcp6       0      0 :::3306                 :::*                    LISTEN      9002/mysqld

登录时指定socket文件
mysql -uroot -p -S /tmp/mysqld3304.sock

第三章 SQL基础应用&元数据获取

1. SQL介绍

Structured Query Language 结构化查询语言,关系型数据库中通用的一种命令.
使用SQL_MODE规范SQL语句的语法标准

2. SQL_MODE 规范SQL语句,确保数据有意义

damao[(none)]>damao[(none)]>select @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                                                |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
NO_ZERO_IN_DATE   时间不能为零 0年0月0分....
ERROR_FOR_DIVISION_BY_ZERO   除数(分母)不能为零

3. SQL常用分类

DDL:Data Definition Language           数据定义语言
DCL:Data Control Language               数据控制语言
DML:Data Manipulation Language      数据操作语言
DQL:Data Query Language                 数据查询语言

4. 字符集及校对规则介绍

utf8    :  最多允许字符长度为3个字节
utf8mb4 :  最多允许字符长度为4个字节
gbk     :  

查看数据库中支持的字符集
damao[(none)]>show charset;
校对规则:排序规则 (是否区分大小写)

AbCD 
ABCD 
mysql> show collation;

\color{red}{说明:可以作用于库级别和表级别.一般是在建库建表时设定}

5. 表的属性和列的属性

5.1 表定义属性

(1)存储引擎:InnoDB
(2)字符集&校对规则:utf8mb4
(3)表注释

5.2 列的属性

5.2.1 数据类型

保证数据有意义(保证数据的准确性和标准性。)

(1)数值类型

image.png

image.png

tinyint : 1Bytes=8bit -128~127 , 0-255 .最多存储1个字节长度数字 
int     : 4Bytes, 0-2^32,-2^31~2^31-1,10位数
bigint  : 8Bytes, 0-2^64,-2^63~2^63-1,20位数

(2) 字符串类型(万能)

image.png

一个汉字占多少长度与编码有关:
UTF-8:一个汉字=3个字节
GBK:一个汉字=2个字节

#char(64)        :  括号中最大的字符长度        255字节 utf8字符集最多存储85个汉字
定长的字符串类型,一次性分配固定长度存储空间,存不满,用空字符串填充

#varchar(64) :变长的字符类型, 按需分配存储空间.
65535字节,最多65533. 
1-255字符之间,单独占用1字节存储字符长度.
256-65535字符长度,单独占用2字节存储字符长度

#enum('山东省','河北省','北京市','上海市'......) :  枚举类型
        0     1         2        3 
枚举类型,比较适合于将来此列的值是固定范围内的特点,可以使用enum,可以很大程度的优化我们的索引结构。
注意: 数字列不要使用,经常变化的列不要使用

区别 :
char(64)  varchar(64)
1. 定长  和 变长 
2. 64代表了,最多可以存储字符的个数
3. 字节限制 255 , 65535字节
5. varchar 需要花费额外的1-2字节存储字符长度

如何选择char或varchar

1. 业务数据是定长还是变长
2. 字符长度
悬念:
大表:  数据类型选择是否会影响到查询效率?
会.为什么? 

(3)时间类型

image.png

image.png

datetime   
timestamp

DATETIME 
范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999。

TIMESTAMP 
1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999。
timestamp会受到时区的影响

(5) 二进制类型 (略)
(6) Json类型(8.0以后支持的比较好)

5.2.2 约束

not null   非空约束  列不能为空
unique key 唯一约束  列的值不能重复
primary key 主键约束(非空且唯一),一张表只能有一个,一般是ID列
unsigned  非负数  数据类型约束

5.2.3 其他属性

auto_increment  自增长,数值默认递增
default         默认值
comment         注释
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354