一 单实例MySQL启动与关闭
1.1推荐 常规方法启动与关闭数据库
启动MySQL: /etc/init.d/mysqldstart
查看3306端口是否启动 :
ss–lnt|grep 3306
ss命令:用于显示socket状态
-l:显示所有本地打开的监听端口
-a:显示所有的sockets
-p:显示使用socket的进程
-t:显示所有tcpsocket
-u:显示所有udpsocket
-d:显示所有DCCPsocket
-w:显示所有RAWsocket
-0:显示所有显示PACKETsocket
-s:列出当前socket详细信息
-o:显示时间信息
-m:显示socket内存使用情况
netstat:用于显示各种网络相关信息
-r:显示路由信息
-g:显示多播组成员
-a(all)显示所有选项
-t(tcp)仅显示tcp相关选项
-u(udp)仅显示udp相关选项
-n拒绝显示别名,能显示数字的全部转化成数字
-l仅列出有在监听的service状态
-e现实一些扩展信息
-o显示时间
-p显示建立相关链接的程序名
1.2 mysqld_safe
Mysql启动基本原理:
mysqld是一个shell启动脚本,启动后最终会调用mysqld_safe脚本,最后调用mysqld服务启动mysql
一般mysql出了问题,可以使用这个,因为可以加参数
然后我们查看进程就有2个进程mysqldmysqld_safe
1.3MySQL关闭
mysqladmin–uroot –p123456 shutdown
/etc/init.d/mysqldstop
kill-USR2 `cat $path/pid`
强制关闭数据库:
killallmysqld
pkillmysqld
killall-9 mysqld
不到万不得已,不要轻易使用,因为生产环境高并发可能会引起数据丢失。
二 多实例的启动与关闭
自己写脚本启动和关闭
三 MySQL 单实例 登录
1直接mysql 无密码的情况
2mysql –uroot
3mysql -uroot -p 标准的DBA登录,这样密码是密文
4mysql -uroot -p123456 建议不要这样,明文密码会泄露
非脚本 不要这样写。而且root要么700 要么shell进行加密
history
删除所有history-c
删除某一条:history-d 加上行号
强制LINUX 不记录敏感历史记录
HISTCONTROL=ignorespace
然后只要加上空格执行命令,就不会记录历史命令
四 修改登录提示符
好处:一眼就能区别是什么环境,可以自己配置;或者改变背景颜色或者鼠标光标
4.1命令行修改提示符,临时生效
Mysql>prompt\u@mysql \r:\m:\s->
或者
setto 'prompt \u@mysql \r:\m:\s->'
4.2配置文件修改,永久生效
放在mysql客户端模块
[mysql]
'prompt\u@mysql \r:\m:\s->'
五 MySQL 多实例登录
mysql-uroot -p123456 -S /data/3306/mysql.sock
mysql-uroot -p123456 -S /data/3307/mysql.sock
注意多实例远程登录不需要指定socket
mysql-uroot -p -h 192.168.3.40 -P3307
六 查看用户权限
SHOWGRANTS FOR mysql;
七 查看帮助文档
helpSHOW GRANTS;
八 修改mysql 密码多方法及注意
数据库用户安全策略介绍
安装mysql数据库后,默认的管理员root账号密码为空,不安全。因此需要设置一个。
a为root设置密码
b删除默认存在的用户账号
c删除默认的test数据库
更加严格的安全措施:
删除root用户,添加新的管理员。
8.1增加system用户,并提升为管理员
GRANTALL PRIVILEGES ON *.* TO system@'localhost' IDENTIFIED BY '123456' WITH GRANTOPTION;
FLUSHPRIVILEGES;//刷新权限表
8.2删除所有mysql中自带的用户,包括root用户
Sql语句 : deletefrom mysql.user;
删除某一个用户话可以DROPUSER 'user'@'域名'.
8.3设置或者修改密码
8.3.1命令行修改
8.3.1.1设置没有密码的用户
单实例
mysqladmin-uroot password '123456'
多实例:
mysqladmin-uroot password '123456' -S /data/3306/mysql.sock
8.3.1.2设置有密码的用户:
单实例
mysqladmin-uroot -p123456 password 'admin'
多实例
mysqladmin-uroot -p123456 password 'admin' -S /data/3306/mysql.sock
8.3.2sql语句修改密码
8.3.2.1update
UPDATEmysql.user SET password = 'root' WHERE user = 'root';
如果这样,是明文的,登录不了
我们需要使用password函数
UPDATEmysql.user SET password = password('root') WHERE user = 'root';
flushprivileges
此方法比较适合通过--skip-grant-tables参数启动数据库之后修改密码。比如Root密码忘记了
8.3.2.2set
setpassword=password('root');
九 找回丢失的mysql密码
9.1单实例
首先停止mysql:/etc/init.d/mysqld stop
然后通过--skip-grant-tables模式登陆,它会忽略授权验证
/bin/mysqld_safe--skip-grant-tables --user=mysql &
UPDATEmysql.user SET password = password(''root'') WHERE user = 'root';
然后通过mysqladmin-uroot -p'root' shutdown才能关掉
注意:这时候/etc/init.d/mysqldstop 是停不掉的,因为没有生成pid文件,包括mysqladmin-uroot -p shutdown也是不行的
如果通过 setpassword=password('root');修改是不生效的
9.2多实例
首先停止mysql
然后通过--skip-grant-tables模式登陆,它会忽略授权验证
/bin/mysqld_safe--defaults-file=/data/3306/my.cnf --skip-grant-tables &
UPDATEmysql.user SET password = password(''root'') WHERE user = 'root';
然后通过mysqladmin-uroot -p'root' shutdown才能关掉
十 SQL分类
DQL:数据查询语言,从表中获取数据.SELECT
DML:数据管理语言或者数据操作语言。 INSERTUPDATE 和DELETE
DCL:它的语句通过GRANT和 REVOKE获得许可
DDL:数据定义语言,一般时CREATE,DROP,ALTER
十一: 创建数据库
CREATEDATABASE IF NOT EXISTS 数据库名(不能数字开头)
默认字符集:latin1.前提在cmake的时候没有指定默认的字符集
创建数据库指定字符集:
CREATEDATABASE 数据库名 DEFAULTCHARACTERSET gbk COLLATE gbk_chinese_ci;
CREATEDATABASE 数据库名 DEFAULTCHARACTERSET utf8 COLLATE utf8_general_ci;
十二 查看当前数据库信息
当前数据库名称:selectdatabase();
当前数据库版本:selectversion();
查看当前数据库用户:selectuser();
查看当前时间:selectnow();
十三 创建MySQL 用户 并给用户授权
一般运维人员授权:
CREATEUSER 'nicky'@'localhost' IDENTIFIED BY '123456'
GRANTALL ON db1.* TO 'nicky'@'localhost'
GRANTALL ON db1.* TO 'nicky'@'192.168.3.%'
如果只创建了用户,但是没有赋予权限,那么权限是USAGE,只能登陆 啥也干不了。
查看授权:
showgrants for user;
十四: 用户可以授权的权限
收回插入权限:
REVOKEINSERT ON *.* FROM 'root'@'localhost';
然后SHOWGRANTS FOR 'root'@'localhost';
下面这些就是可以授予的权限:
GRANTINSERT, SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE,REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCKTABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW,CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACEON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD'*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' WITH GRANT OPTION
十五: 企业生产环境如何授权用户权限
1博客 CMS 产品数据库授权
对于web连接用户授权尽量采用最小化原则
常规情况下,INSERTDELTE UPDATE SELECT 权限就基本够了。
如果需要还可以授予CREATE,DROP
生成数据库表后,然后收回CREATE,DROP权限。
2生产环境主库(写为主,读辅助)
从库只授予SELECT权限
十六:创建表
CREATETABLE IF NOT EXISTS tb_name(
id INT PRIMARY KEY NOT NULL,
name VAHCHAR(20) NOT NULL,
age TINYINT(2) NOT NULL DEFAULT '0'
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
指定数据库引擎,和字符集,
引擎默认InnoDB
字符集默认latin1
Char(m):是固定长度m,如果没有满,则用空格填充
Varchar(m):存储多少用多少。可以变长
例子:
CREATETABLE `subject_comment_manager` (
`subject_comment_manager_id` bigint(12)NOT NULL auto_increment COMMENT '主键',
`subject_type` tinyint(2) NOT NULL COMMENT'素材类型',
`subject_primary_key` varchar(255) NOTNULL COMMENT '素材主键',
`subject_title` varchar(255) NOT NULLCOMMENT '素材名称',
`edit_user_nick` varchar(64) default NULLCOMMENT '修改人',
`edit_user_time` timestamp NULL defaultNULL COMMENT '修改时间',
`edit_comment` varchar(255) default '1'COMMENT '修改理由',
`state` tinyint(1) NOT NULL default '1'COMMENT '0 代表关闭,1代表正常',
PRIMARY KEY(`subject_comment_manager_id`),
KEY `IDX_PRIMARYKEY`(`subject_primary_key`(32)) #表示对括号内前32个字符做前缀索引
KEY `IDX_SUBJECT_TITLE`(`subject_title`()),
KEY `INDEX_NICK_TYPE`(`edit_user_nick`(32),`subject_type`) #联合索引
)ENGINE=InnoDB AUTO INCREMENT=1 DEFAULT CHARSET=utf8
十七: 查看表结构
desctb_name;
showcolumns from tb_name;
两者效果一样
查看建表语句:
Showcreate table tb_name \G
\G发送命令给mysqlserver,以垂直方式显示结果
十八:索引创建
主键索引:他的列内容唯一,每一个表只能有一个主键索引,查询数据库,按照主键查询最快的
给字段添加主键素索引
方法:
1字段 类型PRIMARY KEY
2PRIMARY KEY(字段)
添加普通索引
KEY索引名字 (字段名)
也可以在建表后删除索引:
ALTERTABLE tb_name DROP PRIMARY KEY
ALTERTABLE tb_name DROP INDEX 索引名
也可以在建表后添加索引:一般不建议这么干
ALTERTABLE 表名 CHANGEID IDINT PRIMARY KEY AUTO_INCREMENT.
ALTERTABLE 表名 ADDINDEX 索引名(字段)
对字段前n个字符建立索引:如果列内容前N个字符接近唯一时,这时候可以对列的前N个字符建立索引,而无需对整个列建立索引。这样可以节省创建索引占用的系统空间。
CREATEINDEX 索引名 ON表名(字段(8));
复合索引
为表多个字段建立索引:
CREATEINDEX 索引名 ON表名(字段1,字段2);
唯一索引
约束表内容:
CREATEUNIQUE INDEX 索引名 ON表名(字段名)
查询索引生效问题:
1合索引有前缀生效的特性,比如index(a,b,c) 只有a,ab, abc才生效,ac,bc,b,c是不会用到索引的。
2 索引一定要创在where 条件列,而不是select 要查询的字段
3 数十行到百行级别,没有必要建立索引
4 索引不是越多越好,因为索引不但占用系统资源,更新数据库时还要维护索引数据。
5 尽量对大表唯一数据比较多的列创建索引
来源:CSDN
作者:happy19870612
链接:https://blog.csdn.net/zhanglh046/article/details/78598965