MySQL

安装脚本

#!/bin/bash

MYSQL_BASEDIR=/usr/local/mysql
MySQL_DATADIR=/data/mysql
SERVER_ID=`hostname -I |cut -d'.' -f4` cat >/etc/my.cnf<<EOF
[mysqld]
datadir=/data/mysql
port=3306
socket=/tmp/mysql.sock
pid_file=/data/mysql/mysql.pid
log_error=error.log
user=mysql
skip-name-resolve
log-bin=mysql-bin
log-bin-index=mysql-bin.index
server-id=${SERVER_ID}
character_set_server=utf8
log-slave-updates=1
[mysql]
prompt=(\\u@\\h) [\\d]>\\_
[client]
user=root
password=
EOF COUNT=`ls . |grep mysql-.*-linux-glibc2.5-x86_64.tar.gz |wc -l`
if [ $COUNT -ne 1 ];then
echo "MySQL install tar file must equal one.This is directory equal $COUNT."
exit 100
else
MYSQL_VERSION=`ls . |grep mysql-.*-linux-glibc2.5-x86_64.tar.gz|awk -F'-' '{print $2}'`
fi MYSQL_FILE_NAME=mysql-${MYSQL_VERSION}-linux-glibc2.5-x86_64.tar.gz function mysql_install () {
if [[ `rpm -qa libaio |wc -l` -ne 1 ]]; then
yum install libaio || echo "install libaio error."
exit
fi id mysql || groupadd -r mysql
id mysql || useradd -r -g mysql -s /sbin/nologin -M mysql
if [ ! -d /usr/local/mysql-${MYSQL_VERSION}-linux-glibc2.5-x86_64 ];then
tar xf ${MYSQL_FILE_NAME} -C /usr/local/ && echo "mysql unzip ok."
fi if [ -L /usr/local/mysql ];then
unlink /usr/local/mysql
fi
ln -sv /usr/local/mysql-${MYSQL_VERSION}-linux-glibc2.5-x86_64 /usr/local/mysql
echo "export PATH=$PATH:/usr/local/mysql/bin" >/etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
/bin/cp ${MYSQL_BASEDIR}/support-files/mysql.server /etc/init.d/mysqld
mkdir -p ${MySQL_DATADIR}
chown -R mysql.mysql ${MySQL_DATADIR}
} MYSQL_VERSION_2=`ls . |grep mysql-.*-linux-glibc2.5-x86_64.tar.gz|awk -F'-' '{print $2}' |cut -d'.' -f1-2`
case $MYSQL_VERSION_2 in
5.7 )
mysql_install && mysqld --initialize --user=mysql
MYSQL_PASSWORD=`grep "root@localhost:" /data/mysql/error.log |awk '{print $NF}'`
sed -i s/password=/password=$MYSQL_PASSWORD/ /etc/my.cnf
;;
* )
mysql_install && /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=${MYSQL_BASEDIR}
;;
esac
source /etc/profile.d/mysql.sh
/etc/init.d/mysqld start && echo 'Please execute command "source /etc/profile.d/mysql.sh"'

配置文件

MySQL启动是默认需找配置文件顺序为:/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf,如果相同的参数多次配置则后面的配置会覆盖前面的配置。下面是最基本的mysql的配置。

[mysqld]
datadir=/data/mysql
port=3306
socket=/tmp/mysql.sock
log_error=error.log
user=mysql
skip-name-resolve
default_password_lifetime=0 [client]
user = root
password = redhat [mysql]
prompt=(\\u@\\h) [\\d]>\\_

注意
1.我们在安装mysql时有时会将mysql安装在非/usr/local/目录中,为了避免出现不必要的错误,最好在mysqld标签中配置basedir选项。
2.同时我们还可以通过[mysql-5.6]这种标签来定义根据不同版本启动时所需要的启动参数。
3.未避免出现设置的帐号密码过期最好还是定义default_password_lifetime选项来将密码设置成永不过期。

会话变量

查看全局变量

(root@localhost) [(none)]> show global variables\G

查看会话变量

(root@localhost) [(none)]> show variables\G

注意:我们在MySQL客户端设置参数时默认是当前会话生效,如果在新启用一个会话则不会生效。若想让新启用的会话生效则要使用global参数进行设置全局变量,但是global全局变量这种设置方式并不会在当前会话生效,而是在新开启的会话生效。

(root@localhost) [(none)]> set long_query_time = 5;
Query OK, 0 rows affected (0.00 sec) (root@localhost) [(none)]> show variables like 'long_query_time';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+
1 row in set (0.00 sec) (root@localhost) [(none)]> set global long_query_time = 3;
Query OK, 0 rows affected (0.00 sec) (root@localhost) [(none)]> show variables like 'long_query_time';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

所有会话变量

下面是查看当前所有会话连接的中long_query_time变量的信息。

(root@localhost) [performance_schema]> select * from variables_by_thread where variable_name='long_query_time';
+-----------+-----------------+----------------+
| THREAD_ID | VARIABLE_NAME | VARIABLE_VALUE |
+-----------+-----------------+----------------+
| 28 | long_query_time | 10.000000 |
| 29 | long_query_time | 5.000000 |
| 30 | long_query_time | 3.000000 |
+-----------+-----------------+----------------+
3 rows in set (0.00 sec)

查看当前MySQL的会话连接信息。

(root@localhost) [performance_schema]> show processlist;
+----+------+-----------+--------------------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+--------------------+---------+------+----------+------------------+
| 3 | root | localhost | performance_schema | Sleep | 67 | | NULL |
| 4 | root | localhost | performance_schema | Query | 0 | starting | show processlist |
| 5 | root | localhost | NULL | Sleep | 413 | | NULL |
+----+------+-----------+--------------------+---------+------+----------+------------------+
3 rows in set (0.00 sec)

上面两个查询中会发现Id 和 THREAD_ID无法一一对应,如果想查看两者的详细信息则需要通过下面的方式进行查询:

(root@localhost) [performance_schema]> select * from threads where thread_id = 29 limit 1\G
*************************** 1. row ***************************
THREAD_ID: 29
NAME: thread/sql/one_connection
TYPE: FOREGROUND
PROCESSLIST_ID: 4
PROCESSLIST_USER: root
PROCESSLIST_HOST: localhost
PROCESSLIST_DB: performance_schema
PROCESSLIST_COMMAND: Query
PROCESSLIST_TIME: 0
PROCESSLIST_STATE: Sending data
PROCESSLIST_INFO: select * from threads where thread_id = 29 limit 1
PARENT_THREAD_ID: 1
ROLE: NULL
INSTRUMENTED: YES
HISTORY: YES
CONNECTION_TYPE: Socket
THREAD_OS_ID: 2310
1 row in set (0.00 sec)

通过上面的查询我们就可找出PROCESSLIST_ID和THREAD_ID的对应关系。

权限

创建用户

(root@localhost) [(none)]> create user 'redhat'@'192.168.200.%' identified by 'redhat';
Query OK, 0 rows affected (0.00 sec)

删除用户

(root@localhost) [(none)]> drop user 'redhat'@'192.168.200.%';
Query OK, 0 rows affected (0.00 sec)

查看权限

(root@localhost) [(none)]> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec) (root@localhost) [(none)]> show grants for 'redhat'@'192.168.%.%';
+----------------------------------------------+
| Grants for redhat@192.168.%.% |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'redhat'@'192.168.%.%' |
+----------------------------------------------+
1 row in set (0.00 sec)

赋予权限

(root@localhost) [(none)]> grant select,update,insert,delete on test.* to 'redhat'@'192.168.%.%';
Query OK, 0 rows affected (0.00 sec) (root@localhost) [(none)]> grant select,update,insert,delete on test.* to 'redhat'@'192.168.%.%' with grant option;
Query OK, 0 rows affected (0.00 sec)

修改密码

(root@localhost) [(none)]> alter user 'redhat'@'192.168.%.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

删除权限

(root@localhost) [(none)]> grant create,index on test.* to 'redhat'@'192.168.%.%';
Query OK, 0 rows affected (0.00 sec) (root@localhost) [(none)]> show grants for 'redhat'@'192.168.%.%';
+-------------------------------------------------------------------------------------------+
| Grants for redhat@192.168.%.% |
+-------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'redhat'@'192.168.%.%' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX ON `test`.* TO 'redhat'@'192.168.%.%' |
+-------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec) (root@localhost) [(none)]> revoke create,index on test.* from 'redhat'@'192.168.%.%';
Query OK, 0 rows affected (0.00 sec) (root@localhost) [(none)]> show grants for 'redhat'@'192.168.%.%';
+----------------------------------------------------------------------------+
| Grants for redhat@192.168.%.% |
+----------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'redhat'@'192.168.%.%' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `test`.* TO 'redhat'@'192.168.%.%' |
+----------------------------------------------------------------------------+
2 rows in set (0.00 sec) (root@localhost) [(none)]> revoke all on test.* from 'redhat'@'192.168.%.%';
Query OK, 0 rows affected (0.00 sec) (root@localhost) [(none)]> show grants for 'redhat'@'192.168.%.%';
+----------------------------------------------+
| Grants for redhat@192.168.%.% |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'redhat'@'192.168.%.%' |
+----------------------------------------------+
1 row in set (0.00 sec)

MySQL赋予权限时是将用户的权限根据赋予权限命令按规则写入:mysql.user,mysql.db,mysql.tables_priv,mysql.columns_priv四个表中。

限制用户连接数

(root@localhost) [mysql]> alter user 'redhat'@'192.168.%.%' with max_user_connections 1;
Query OK, 0 rows affected (0.00 sec)

如果次数超过设置的现在则会报如下的错误:

# mysql -u redhat -h192.168.200.21 -p
Enter password:
ERROR 1226 (42000): User 'redhat' has exceeded the 'max_user_connections' resource (current value: 1)

在设置时候最好还是改回默认不限制,不然会影响下面的实验。

官方文档:
https://dev.mysql.com/doc/refman/5.x/en/privileges-provided.html

限制登录密码

在日常使用中我们会要求登录数据库帐号的密码复杂度,这就可以使用validate_password.so插件进行限制。这个插件的使用可以在线安装,也可以写在配置文件中从而重新启动数据库。

在线安装

(root@192.168.200.21) [(none)]> install plugin validate_password soname 'validate_password.so';
Query OK, 0 rows affected (0.03 sec)

配置文件

[mysqld]
plugin-load=validate_password.so

下面是配置参数:

(root@192.168.200.21) [(none)]> show variables like 'validate%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.01 sec)

安装这个插件之后在将密码设置的不符合要求就会报错:

(root@192.168.200.21) [(none)]> alter user 'redhat'@'192.168.%.%' identified by 'redhat';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements (root@192.168.200.21) [(none)]> alter user 'redhat'@'192.168.%.%' identified by 'MmmAaaa123_';
Query OK, 0 rows affected (0.00 sec)

MySQL安装及初步配置.md的更多相关文章

  1. MySQL安装与初步操作

    MySQL是一款出色的中小型关系数据库,做Java Web开发时,要做到数据持久化存储,选择一款数据库软件自然必不可少. 由于MySQL社区版开元免费,功能比较强大,在此以MySQL为例,演示MySQ ...

  2. MySQL安装及主从配置

    系统环境:CentOS release 6.5 (Final)(最小化安装) MySQL版本:mysql-5.6.12 Cmake版本:cmake-2.8.4 说明:安装mysql先安装cmake(原 ...

  3. mySQL安装与基础配置

    关系型数据库介绍 数据结构模型 数据结构模型主要有: 层次模型 网状结构 关系模型 关系模型: 二维关系:row,column 数据库管理系统:DBMS 关系:Relational,RDBMS RDB ...

  4. mysql安装后的配置

    mysql的安装其实就是一步一步按提示就可以: 1.开始安装 2.选择mysql安装位置 3.选择数据库存放位置,最好和mysql安装在一起,好查找 4.选择详细设置 5.选开发者机器 6.选多功能型 ...

  5. MySQL安装与基本配置

    一.简介 SQL语言 DDL:表.视图.索引.触发器操作等.CREATE/ALTER/DROP语句 DML:数据操作.SELECT/INSERT/UPDATE/DELETE DCL:权限设置.GRAN ...

  6. Mysql安装及主从复制配置

    1.下载 mysql数据库 wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.9-linux-glibc2.5-x86_64.ta ...

  7. mysql安装和基本配置-redhat

    1.redhat yum替换参考 url:http://blog.csdn.net/zcyhappy1314/article/details/17580943 2.yum卸载mysql rpm -qa ...

  8. Mysql安装与主从配置

    安装MySql 操作系统:Windows Server 2008 R2 Standard MySql版本:mysql-5.7.17-winx64 第一步:解压mysql-5.7.17-winx64.z ...

  9. MySQL安装及后续配置

    rpm -qa | grep mysql  检查已安装的mysql版本 rpm -e --nodeps mysql-libs-5.1.71 卸载 tar -zxvf MySQL.tar.gz 解压 安 ...

随机推荐

  1. Java基础——网络编程(二)

    一.套接字 Socket 网络驱动程序提供给应用程序编程的接口和一种机制,可以比喻成一个港口码头 应用程序只要把货放在这,就算完成了货物的运送.它在应用程序中创建,通过一种绑定机制与驱动程序建立关系, ...

  2. 【Tomcat】配置Web界面管理

    到Tomcat的cof目录下的tomcat-users.xml文件进行配置 配置如下: <?xml version='1.0' encoding='utf-8'?><tomcat-u ...

  3. VMware12创建新的虚拟机及设置硬件环境

    一.安装VMware虚拟机 http://jingyan.baidu.com/article/215817f78879c21edb142379.html?qq-pf-to=pcqq.group 二.创 ...

  4. 修改VS类模板自动添加public修饰符和版权注释信息

    在开发过程中,我们经常需要给类或接口添加public修饰符(默认没有)和一些相关的注释信息,这个工作是机械而枯燥的,而这个简单的需求其实是可以通过修改VS自带的类模板来实现的,下面是详细的修改步骤. ...

  5. Mybatis的枚举处理器

    Mybatis有两个默认枚举处理器 EnumOrdinalTypeHandler EnumTypeHandler 自定义枚举 EnumOrdinalTypeHandler 这个处理器负责将pojo里面 ...

  6. django-xss攻击原理与防范

    一.跨站脚本攻击(XSS) XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中.也属一种注入攻击,注入本质上就是把输入的数据变成可执行的程序 ...

  7. grafana启用mysql作为的后台数据库

    vim grafana-5.4.2/conf/defaults.ini grafana默认使用sqlite3使用后台数据库,可选用mysql,postgres,sqlite3. 重新启动 注意: gr ...

  8. python 数据结构中的链表操作

    链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就 ...

  9. 前端开发笔记(2)css基础(上)

    CSS介绍 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS ...

  10. 活字格Web应用平台学习笔记1 - 下载安装,ready go

    今年有一个很重要的职业目标,就是好好学习活字格这个神器,争取在这两个月拿到活字格初级工程师的认证证书.给自己加个油,今天开始好好学习,好好做笔记. 第一步,下载安装 先去活字格官网:http://ww ...