一、mysql连接管理

1.连接工具

1)mysql自带的连接命令 mysql

#常见用于连接的参数:
-u:            指定用户   mysql -uroot
-p:            指定密码   mysql -uroot -p123
-h:            指定连接的主机   mysql -uroot -p123 -h10.0.0.51
-P:            指定端口   mysql -uroot -p123 -h10.0.0.51 -P3307
-S:            指定socket文件   mysql -uroot -p123 -S /tmp/mysql.sock
-e:            库外执行语句   mysql -uroot -p123456 -e 'show databases'
#--protocol   指定连接方式   mysql --protocol=TCP 或 --protocol=socket

2)第三方的连接工具

1.sqlyog
2.Navicat
#注意:数据库是没有外网的,想连接可以使用ssh通道
3.应用程序连接(研发使用)

2.连接方式

1)socket连接

mysql -uroot -p123
mysql -uroot -p123 -S /tmp/mysql.sock

2)TCP/IP连接

mysql -uroot -p123 -h10.0.0.51

二、mysql启动关闭流程

1.启动数据库

1./etc/init.d/mysqld start -----> mysql.server -----> mysqld_safe -----> mysqld
2.mysqld_safe --defaults-file=/etc/my.cnf -----> mysqld_safe -----> mysqld
3.systemctl start mysql -----> mysqld_safe -----> mysqld

2.停止数据库

1./etc/init.d/mysqld stop
2.mysqladmin -uroot -p123 shutdown
3.systemctl stop mysql
4.mysqladmin -S /service/3307/mysql.sock shutdown  (多实例关闭方式)

#不推荐的关闭方式
kill -9 mysqlpid
killall mysqld
pkill mysqld
#可能出现的问题
1、如果在业务繁忙的情况下,数据库不会释放pid和sock文件
2、号称可以达到和Oracle一样的安全性,但是并不能100%达到
3、在业务繁忙的情况下,丢数据(补救措施,高可用)

三、mysql配置读取

1.初始化内容

1)我不知道我的程序在哪?                        --basedir
2)我也不知道我将来启动后去哪找数据库?            --datadir
3)将来我启动的时候启动信息和错误信息放在哪?          $datadir/db01.err   --log-error=/mysql/db01.err
4)我启动的时候sock文件pid文件放在哪?                $datadir/db01.pid   --pid-file=/mysql/db01.pid
5)我启动,你们给了我多少内存?

1)预编译:cmake去指定,硬编码到程序当中去
cmake . -DCMAKE_INSTALL_PREFIX=/service/mysql-5.6.46 -DMYSQL_DATADIR=/service/mysql-5.6.46/data -DMYSQL_UNIX_ADDR=/service/mysql-5.6.46/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITH_ZLIB=bundled -DWITH_SSL=system -DENABLED_LOCAL_INFILE=1 -DWITH_EMBEDDED_SERVER=1 -DENABLE_DOWNLOADS=1 -DWITH_DEBUG=0

2)在命令行设定启动初始化配置
--skip-grant-tables 
--skip-networking
--datadir=/application/mysql/data
--basedir=/application/mysql
--defaults-file=/etc/my.cnf
--pid-file=/application/mysql/data/db01.pid
--socket=/application/mysql/data/mysql.sock
--user=mysql
--port=3306
--log-error=/application/mysql/data/db01.err

3)初始化配置文件(/etc/my.cnf)
socket=/tmp/mysql.sock
datadir=/test/mysql
basedir=/test/mysql/data

2.数据库配置文件

1)配置文件

/etc/my.cnf
/etc/mysql/my.cnf
$basedir/my.cnf(前提是在环境变量中定义了MYSQL_HOME变量)
~/.my.cnf

#defaults-extra-file (类似include)

2)读取配置文件顺序

1./etc/my.cnf
2./etc/mysql/my.cnf
3.$basedir/my.cnf(前提是在环境变量中定义了MYSQL_HOME变量)
4.~/.my.cnf

3)生效顺序(优先级)

1.~/.my.cnf
2.$basedir/my.cnf
3./etc/mysql/my.cnf
4./etc/my.cnf

4)生效顺序测试

#1.配置/etc/my.cnf
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
server_id=1

#2.配置/etc/mysql/my.cnf
[root@db01 ~]# mkdir /etc/mysql
[root@db01 ~]# vim /etc/mysql/my.cnf
[mysqld]
server_id=2

#3.配置$basedir/mysql/my.cnf
[root@db01 ~]# vim /service/mysql/my.cnf
[mysqld]
server_id=3

#4.配置~/.my.cnf
[root@db01 ~]# vim ~/.my.cnf
[mysqld]
server_id=4

#4.重启数据库(注意重启时不要使用system,因为里面指定了配置文件,就不会读取其他的了)
[root@db01 ~]# systemctl stop mysql
[root@db01 ~]# /etc/init.d/mysqld start

#6.查看数据库server_id
[root@db01 ~]# mysql -uroot -p123456 -e "show variables like 'server_id'"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 4     |
+---------------+-------+

#7.删除~/.my.cnf后查看id
[root@db01 ~]# rm -rf ~/.my.cnf
[root@db01 ~]# /etc/init.d/mysqld restart
[root@db01 ~]# mysql -uroot -p123456 -e "show variables like 'server_id'"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 3     |
+---------------+-------+

#8.删除$basedir/mysql/my.cnf后查看id
[root@db01 ~]# rm -rf /service/mysql/my.cnf
[root@db01 ~]# /etc/init.d/mysqld restart
[root@db01 ~]# mysql -uroot -p123456 -e "show variables like 'server_id'"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     |
+---------------+-------+

#9.删除/etc/mysql/my.cnf后查看id
[root@db01 ~]# rm -rf /etc/mysql/my.cnf
[root@db01 ~]# /etc/init.d/mysqld restart
[root@db01 ~]# mysql -uroot -p123456 -e "show variables like 'server_id'"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     |
+---------------+-------+

3.执行参数优先级

1)socket文件配置位置

#cmake:
socket=/service/mysql/tmp/mysql.sock

#命令行:
--socket=/tmp/mysql.sock

#配置文件:
vim /etc/my.cnf
[mysqld]
socket=/opt/mysql.sock

#default参数:
--defaults-file=/tmp/a.txt
vim /tmp/a.txt
[mysqld]
socket=/tmp/test.sock

2)配置参数优先级测试

#1.启动mysql测试socket文件位置
mysql_safe --defaults-file=/tmp/a.txt --socket=/tmp/mysql.sock &
测试结果:
    /tmp/mysql.sock

#2.启动mysql测试socket文件位置
mysql_safe --defaults-file=/tmp/a.txt
测试结果:
    /tmp/test.sock

#3.启动mysql测试socket文件位置
/etc/init.d/mysqld start
测试结果:
    /opt/mysql.sock  (opt目录要授权mysql权限才能写入sock文件)

#4.修改配置文件,启动数据库测试
vim /etc/my.cnf
[mysqld]
#socket=/opt/mysql.sock

/etc/init.d/mysqld restart
测试结果:
    /service/mysql/tmp/mysql.sock

4.优先级总结

#优先级排序
命令行 > --defaults-file > ~/.my.cnf > $basedir/mysql/my.cnf > /etc/mysql/my.cnf > defaults-extra-file (类似include) >/etc/my.cnf > 初始化命令 > cmake

5.配置文件的使用

1)配置文件的作用

1.影响的是客户端的连接
2.影响的是服务端的启动

2)影响客户端的连接

[root@db01 ~]# vim /etc/my.cnf
#在配置文件添加,可以不输入用户密码直接登录
[client]
user=root
password=123456

3)影响服务端的启动

[root@db01 ~]# vim /etc/my.cnf
[mysqld]
#server_id=1 修改
server_id=2

#重启使配置文件生效
[root@db01 ~]# systemctl restart mysql
[root@db01 ~]# mysql -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     |
+---------------+-------+
[root@db01 ~]#

4)总结

1.客户端程序也受配置文件影响      [mysql]  [client]
2.客户端修改配置文件可以不重启
3.服务端配置修改必须重启才能生效  [mysqld]  [server]

4.企业经常配置
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
server_id=2
socket=/tmp/mysql.sock

[mysql]
socket=/tmp/mysql.sock

四、mysql的命令

1.mysql连接服务端的快捷命令

\c: 中断当前的命令
\G: 垂直显示结果
\q: 退出数据库  等于 exit quit
\h: 显示帮助  等于help
\T: 将执行和输出的内容打印到服务器文件
    \t: 取消写入文件
\.: 导入指定的sql文件  等于 source
\s: 查看状态  等于 status

2.help命令

mysql> help create database
mysql> help
mysql> help contents
mysql> help select
mysql> help create
mysql> help create user
mysql> help status
mysql> help show

3.客户端mysqladmin的命令

1)修改密码

[root@db01 ~]# mysqladmin -uroot -p123456 password '123'

2)关闭服务

[root@db01 ~]# mysqladmin -S /service/3307/mysql.sock shutdown
[root@db01 ~]# mysqladmin -uroot -p123 shutdown

3)库外创建数据库

[root@db01 ~]# mysqladmin -uroot -p123 create linux7

4)库外删除数据库

[root@db01 ~]# mysqladmin -uroot -p123 drop linux7
Do you really want to drop the 'linux7' database [y/N] y
Database "linux7" dropped

5)查看数据库配置

[root@db01 ~]# mysqladmin -uroot -p123 variables
[root@db01 ~]# mysqladmin -uroot -p123 variables | grep server_id

6)监测数据库是否启动

[root@db01 ~]# mysqladmin -uroot -p123 ping
Warning: Using a password on the command line interface can be insecure.
mysqld is alive
[root@db01 ~]# mysqladmin -uroot -p ping
Enter password: 
mysqld is alive

#如果没启动,则连接报错

7.查看数据库信息

[root@db01 ~]# mysqladmin -uroot -p123 status
Warning: Using a password on the command line interface can be insecure.
Uptime: 49  Threads: 1  Questions: 10  Slow queries: 0  Opens: 70  Flush tables: 1  Open tables: 63  Queries per second avg: 0.204

8)刷新授权表

#相当于进到数据库里面执行 flush privileges
[root@db01 ~]# mysqladmin -uroot -p123 reload

9)刷新binlog日志

[root@db01 ~]# mysqladmin -uroot -p123 flush-log

SQL语句

一、SQL语句语义种类

DDL:Data Query Language 数据定义语言(CREATE)
DCL:Data control Language 数据控制语言(GRANT,ROLLBACK,COMMIT)
DML:Data Manipulation Language 数据操作语言(INSERT,UPDATE,DELETE)
DQL:Data Query Language 数据查询语言(SELECT)

二、DDL语句---数据定义语言(CREATE)

1.CREATE针对库的操作

1)查看语法

mysql> help create database
Name: 'CREATE DATABASE'
Description:
Syntax:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ...

create_specification:
    [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name

2)创建库

mysql> create database qiudao;
Query OK, 1 row affected (0.00 sec)

mysql> create schema qiudao;
ERROR 1007 (HY000): Can't create database 'qiudao'; database exists

3)创建数据库已存在会报错,使用IF NOT EXISTS

mysql> create database qiudao;
ERROR 1007 (HY000): Can't create database 'qiudao'; database exists

mysql> create database if not exists qiudao;
Query OK, 1 row affected, 1 warning (0.00 sec)

4)查看建库语句

mysql> show create database qiudao;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| qiudao   | CREATE DATABASE `qiudao` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

5)创建数据库指定字符集和校验规则

mysql> create database  qiudao charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

6)删库

mysql> drop database qiudao;
Query OK, 0 rows affected (0.00 sec)

7)修改库

mysql> alter database qiudao charset utf8mb4 collate utf8mb4_general_ci;
Query OK, 1 row affected (0.00 sec)

2.CREATE 针对表的操作

1)查看建表语法

mysql> help create table;
Name: 'CREATE TABLE'
Description:
Syntax:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)]
    [table_options]
    [partition_options]
    [IGNORE | REPLACE]
    [AS] query_expression

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    { LIKE old_tbl_name | (LIKE old_tbl_name) }

2)建表

#进入qiudao库
mysql> use qiudao
Database changed

#查看所在库
mysql> select database();
+------------+
| database() |
+------------+
| qiudao     |
+------------+
1 row in set (0.00 sec)

#建表
mysql> create table qiudao(id int);

3)数据类型

int:            整数 -2^31 ~ 2^31-1    (-2147483648  ~  2147483647)
tinyint:        最小整数 -128 ~ 127        #一般年龄使用
varchar:        字符类型(变长)         #身份证 231026161616161616161X
char:            字符类型(定长)
enum:            枚举类型              #填写性别,指定多个选项,选择其中一个
datetime:        时间类型    年月日时分秒

4)数据类型测试

#建表测试int类型
mysql> create table qiudao(id int);

#查看数据表结构
mysql> desc qiudao;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)

#插入数据库失败
mysql> insert into qiudao  values(11111111111);
ERROR 1264 (22003): Out of range value for column 'id' at row 1

mysql> insert into qiudao  values(2222222222);
ERROR 1264 (22003): Out of range value for column 'id' at row 1

mysql> insert into qiudao  values(-2147483649);
ERROR 1264 (22003): Out of range value for column 'id' at row 1

mysql> insert into qiudao  values(2147483648);
ERROR 1264 (22003): Out of range value for column 'id' at row 1

mysql> insert into qiudao  values(2147483647);
Query OK, 1 row affected (0.00 sec)

mysql> insert into qiudao  values(-2147483648);
Query OK, 1 row affected (0.00 sec)

#原因:
    因为int类型的范围是-2147483648到2147483647之间的数
#建表测试varchar和enum类型
mysql> create table qiudao2(id int,name varchar(10),gender enum('m','f','qiudao'));
Query OK, 0 rows affected (0.01 sec)

#查看表属性
mysql> desc qiudao2;
+--------+------------------------+------+-----+---------+-------+
| Field  | Type                   | Null | Key | Default | Extra |
+--------+------------------------+------+-----+---------+-------+
| id     | int(11)                | YES  |     | NULL    |       |
| name   | varchar(10)            | YES  |     | NULL    |       |
| gender | enum('m','f','qiudao') | YES  |     | NULL    |       |
+--------+------------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

#插入数据
#name是varchar(10)位,不能超过10位字符
mysql> insert into qiudao2 values(1,'qiudaosgdsb','nv');
ERROR 1406 (22001): Data too long for column 'name' at row 1

#gender是enum类型,必须填写指定选项
mysql> insert into qiudao2 values(1,'qiudaodsb','nv');
ERROR 1265 (01000): Data truncated for column 'gender' at row 1

mysql> insert into qiudao2 values(1,'qiudaodsb','f');
Query OK, 1 row affected (0.00 sec)
#建表测试datetime
mysql> create table qiudao3( id int, name varchar(10), age tinyint, gender enum('m','f'), Birthday datetime);
Query OK, 0 rows affected (0.02 sec)

mysql> desc qiudao3;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| id       | int(11)       | YES  |     | NULL    |       |
| name     | varchar(10)   | YES  |     | NULL    |       |
| age      | tinyint(4)    | YES  |     | NULL    |       |
| gender   | enum('m','f') | YES  |     | NULL    |       |
| Birthday | datetime      | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
Copyright © 高程程 all right reserved,powered by Gitbook修订于: 2021-05-18 21:14:41

results matching ""

    No results matching ""