一、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'
2)第三方的连接工具
1.sqlyog
2.Navicat
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
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)生效顺序测试
[root@db01 ~]
[mysqld]
server_id=1
[root@db01 ~]
[root@db01 ~]
[mysqld]
server_id=2
[root@db01 ~]
[mysqld]
server_id=3
[root@db01 ~]
[mysqld]
server_id=4
[root@db01 ~]
[root@db01 ~]
[root@db01 ~]
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 4 |
+---------------+-------+
[root@db01 ~]
[root@db01 ~]
[root@db01 ~]
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 3 |
+---------------+-------+
[root@db01 ~]
[root@db01 ~]
[root@db01 ~]
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+
[root@db01 ~]
[root@db01 ~]
[root@db01 ~]
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
3.执行参数优先级
1)socket文件配置位置
socket=/service/mysql/tmp/mysql.sock
--socket=/tmp/mysql.sock
vim /etc/my.cnf
[mysqld]
socket=/opt/mysql.sock
--defaults-file=/tmp/a.txt
vim /tmp/a.txt
[mysqld]
socket=/tmp/test.sock
2)配置参数优先级测试
mysql_safe --defaults-file=/tmp/a.txt --socket=/tmp/mysql.sock &
测试结果:
/tmp/mysql.sock
mysql_safe --defaults-file=/tmp/a.txt
测试结果:
/tmp/test.sock
/etc/init.d/mysqld start
测试结果:
/opt/mysql.sock (opt目录要授权mysql权限才能写入sock文件)
vim /etc/my.cnf
[mysqld]
/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 ~]
[client]
user=root
password=123456
3)影响服务端的启动
[root@db01 ~]
[mysqld]
server_id=2
[root@db01 ~]
[root@db01 ~]
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+
[root@db01 ~]
4)总结
1.客户端程序也受配置文件影响 [mysql] [client]
2.客户端修改配置文件可以不重启
3.服务端配置修改必须重启才能生效 [mysqld] [server]
4.企业经常配置
[root@db01 ~]
[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 ~]
2)关闭服务
[root@db01 ~]
[root@db01 ~]
3)库外创建数据库
[root@db01 ~]
4)库外删除数据库
[root@db01 ~]
Do you really want to drop the 'linux7' database [y/N] y
Database "linux7" dropped
5)查看数据库配置
[root@db01 ~]
[root@db01 ~]
6)监测数据库是否启动
[root@db01 ~]
Warning: Using a password on the command line interface can be insecure.
mysqld is alive
[root@db01 ~]
Enter password:
mysqld is alive
7.查看数据库信息
[root@db01 ~]
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)刷新授权表
[root@db01 ~]
9)刷新binlog日志
[root@db01 ~]
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)建表
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: 字符类型(变长)
char: 字符类型(定长)
enum: 枚举类型
datetime: 时间类型 年月日时分秒
4)数据类型测试
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之间的数
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)
mysql> insert into qiudao2 values(1,'qiudaosgdsb','nv');
ERROR 1406 (22001): Data too long for column 'name' at row 1
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)
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 | |
+----------+---------------+------+-----+---------+-------+