一. 8.0.16二进制安装&& 5.7.26升级到8.0
[root@db01 /usr/local]# mv mysql-8.0.16-linux-glibc2.12-x86_64 mysql80
[root@db01 /usr/local]# chown -R mysql.mysql mysql80
[root@db01 /usr/local]# mkdir -p /data/mysql/data80
[root@db01 /usr/local]# chown -R mysql.mysql /data/
[root@db01 /usr/local]# mv /etc/my.cnf /etc/my.cnf.bak
[root@db01 ~]# cat /etc/my80.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql80
datadir=/data/mysql/data80
socket=/tmp/mysql80.sock
port=3380
[root@db01 ~]# /usr/local/mysql80/bin/mysqld_safe --defaults-file=/etc/my80.cnf &
5.6 升级 到 5.7 思路
1. 安装新版本软件
2. 改软连接或配置文件basedir
3. 用5.7的软件启动5.6的数据
5. mysql_upgrade -uroot -p123 -S /tmp/mysql.sock
跨版本升级 :
1. 不要夸多个版本
2. 看好版本
二. MySQL的启动关闭及root用户密码忘记解决办法
2.1 SysV
service mysqld start/stop/restart/status
2.2 systemd
[root@db01 ~]# systemctl start/stop/restart/status mysqld --socket=/tmp/aa.sock
2.3 手工启动方式(维护性操作时)
/etc/init.d/mysqld -----> /usr/local/mysql/bin/mysqld_safe ----> /usr/local/mysql/bin/mysqld
例子: 管理员用户root@'localhost',密码丢失 .
(1. 通过跳过授权表参数+跳TCP/IP的参数,启动数据库
--skip-grant-tables : 跳过授权表,连接层关闭验证模块.
--skip-networking : 关闭连接层TCP/IP,只留socket文件连接
(2. 无密码登录到MySQL
mysql
(3. 修改密码
mysql> alter user root@'localhost' identified by '123';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> flush privileges;
mysql> alter user root@'localhost' identified by '123';
(5. 正常重启数据库
[root@db01 ~]# service mysqld restart
2.5 mysql的其他关闭方式
[root@db01 ~]# mysqladmin -uroot -p -S /tmp/mysql.sock shutdown
三. MySQL初始化配置
3.0 初始化配置方式
(1) 配置文件 *****
(2) 命令行 ***
(3) 编译安装 *
3.1 配置文件默认读取顺序(/etc/my.cnf)
[root@db01 ~]# mysqld --help --verbose |grep my.cnf
/etc/my.cnf ---> /etc/mysql/my.cnf ----> /usr/local/mysql/etc/my.cnf ---> ~/.my.cnf
scoket=A B C D
自己定义默认位置: mysqld或者mysqld_safe 加入 --defaults-file=/opt/oldguo.conf
3.2 配置文件内容
3.2.1 影响范围
服务端启动和工作
本地客户端连接(socket)
3.2.2 内容结构
标签:
服务端: [mysqld] [mysqld_safe] [server]
客户端: [mysql] [mysqldump] [client]
参数:
参数名=值
例子:
[root@db01 ~]# cat /etc/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
四. MySQL多实例
5.1 规划
(1) 端口 : 3307,3308,3309
(2) 数据 : /data/330{7..9}/data
(3) 配置文件: /data/330{7..9}/my.cnf
port=3307/3308/3309
server_id=7/8/9
datadir=/data/330{7..9}/data
socket=/tmp/mysql330{7..9}.sock
5.2 干活
(1) 创建关键目录
mkdir -p /data/330{7..9}/data
chown -R mysql.mysql /data/*
(2) 初始化数据
[root@db01 /data]# mv /etc/my.cnf /tmp
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data
(3) 准备配置文件
cat > /data/3307/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3307/data
port=3307
server_id=7
socket=/tmp/mysql3307.sock
EOF
cat > /data/3308/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3308/data
port=3308
server_id=8
socket=/tmp/mysql3308.sock
EOF
cat > /data/3309/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3309/data
port=3309
server_id=9
socket=/tmp/mysql3309.sock
EOF
(5) 准备启动脚本
cat > /etc/systemd/system/mysqld3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF
cat > /etc/systemd/system/mysqld3308.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
EOF
cat > /etc/systemd/system/mysqld3309.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF
(6) 启动多实例
[root@db01 ~]# systemctl start mysqld3307
[root@db01 ~]# systemctl start mysqld3308
[root@db01 ~]# systemctl start mysqld3309
[root@db01 ~]# netstat -tulnp|grep mysqld
tcp6 0 0 :::3307 :::* LISTEN 10327/mysqld
tcp6 0 0 :::3308 :::* LISTEN 10361/mysqld
tcp6 0 0 :::3309 :::* LISTEN 10395/mysqld
五. SQL基础应用&元数据获取
1. SQL介绍
结构化的查询语言.关系型数据库中通用的一种命令.
使用SQL_MODE规范SQL语句的语法标准.
2. SQL_MODE
mysql> select @@sql_mode;
ONLY_FULL_GROUP_BY,
STRICT_TRANS_TABLES,
NO_ZERO_IN_DATE,
NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,
NO_ENGINE_SUBSTITUTION
确保数据有意义.
- SQL常用分类
DDL : 数据定义语言
DCL : 数据控制语言
DML : 数据操作语言
DQL : 数据查询语言
- 字符集&校对规则介绍
字符集:
utf8 : 最多允许字符长度为3个字节
utf8mb4 : 最多允许字符长度为4个字节
校对规则 : 排序规则
说明:
可以作用于库级别和表级别.一般是在建库建表时设定
- 表的属性和列的属性
表定义属性
存储引擎 : InnoDB
字符集 & 校对规则 : utf8mb4
注释
- 列的属性
数据类型
保证数据有意义.
(1) 数值类型
tinyint : 1Bytes=8bit -128~127 , 0-255 .最多存储1个字节长度数字
int : 4Bytes, 0-2^32,-2^31~2^31-1,10位数
bigint : 8Bytes, 0-2^64,-2^63~2^63-1,20位数
(2) 字符串类型(万能)
char(64) : 括号中最大的字符长度 255字节
定长的字符串类型,一次性分配固定长度存储空间,存不满,用空字符串填充
varchar(64) :变长的字符类型, 按需分配存储空间.
65535字节,最多65533.
1-255字符之间,单独占用1字节存储字符长度.
256-65535字符长度,单独占用2字节存储字符长度
(3) enum('山东省','河北省','北京市','上海市'......) : 枚举类型
0 1 2 3
(4) 时间类型
datetime
timestamp
DATETIME
范围为从 1000-01-01 00:00:00.000000 至 9999-12-31
23:59:59.999999。
TIMESTAMP
1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999。
timestamp会受到时区的影响
区别 :
char(64) varchar(64)
1. 定长 和 变长
2. 64代表了,最多可以存储字符的个数
3. 字节限制 255 , 65535字节
5. varchar 需要花费额外的1-2字节存储字符长度
如何选择:
- 业务数据是定长还是变长
- 字符长度
注意: 数字列不要使用,经常变化的列不要使用
六.
1. 约束
not null 非空约束
unique key 唯一约束
primary key 主键约束(非空且唯一),一张表只能有一个,一般是ID列
数据类型约束: unsigned 非负数
2.其他属性
auto_increment 自增长
default 默认值
comment 注释