MySQL运维管理

做~自己de王妃 提交于 2019-11-27 10:49:42

一 单实例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 尽量对大表唯一数据比较多的列创建索引

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!