• MySQL学习笔记(一 mysql简介)


    MySQL学习笔记目录

    1.什么是 Mysql

    • MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。
    • Mysql 是开源的,可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 Mysql 系统。
    • MySQL 使用标准的 SQL 数据语言形式。
    • Mysql 可以允许于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、 Eiffel、Ruby 和 Tcl 等。
    • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支 持最大的表文件为 8TB。

    2. Mysql 高手是怎样练成的

    • 数据库内部结构和原理
    • 数据库建模优化
    • 数据库索引建立
    • SQL 语句优化
    • SQL 编程(自定义函数、存储过程、触发器、定时任务)
    • mysql 服务器的安装配置
    • 数据库的性能监控分析与系统优化
    • 各种参数常量设定
    • 主从复制
    • 分布式架构搭建、垂直切割和水平切割
    • 数据迁移
    • 容灾备份和恢复
    • shell 或 python 等脚本语言开发
    • 对开源数据库进行二次开发

    2.在 Linux 上安装 Mysql

    2.1 准备工作

    2.1.1 检查当前系统是否安装过 Mysql

    (1)CentOS6 环境下 命令:

    rpm -qa|grep mysql
    
    • 1

    在这里插入图片描述

    默认 Linux 在安装的时候,自带了 mysql 相关的组件。

    先卸载系统自带的 mysql,执行卸载命令

    rpm -e --nodeps mysql-libs
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    (1)CentOS7 环境下 命令:

    rpm -qa|grep mariadb
    
    • 1

    在这里插入图片描述

    默认 Linux(CentOS7)在安装的时候,自带了 mariadb(mysql 完全开源版本)相关的组件。

    先卸载系统自带的 mariadb,执行卸载命令

    rpm -e --nodeps mariadb-libs
    
    • 1
    2.1.2 检查/tmp 文件夹权限

    查看/tmp 文件夹权限:

    ll /tmp
    
    • 1

    在这里插入图片描述

    赋予其最大权限:

    在这里插入图片描述

    2.2 Mysql 的安装

    按步骤按照

    安装的版本是 mysql 5.5,官网下载地址:http://dev.mysql.com/downloads/mysql/

    ①将 rpm 安装包拷贝到 opt 目录下

    在这里插入图片描述

    ②在安装目录下执行 rpm 安装

    rpm -ivh MySQL-client-5.5.54-1.linux2.6.x86_64.rpm
    
    • 1

    在这里插入图片描述

    rpm -ivh MySQL-server-5.5.54-1.linux2.6.x86_64.rpm
    
    • 1

    在这里插入图片描述

    安装完成后,出现如下警告,需要为软件设置 root 用户的密码。

    在这里插入图片描述

    在这里插入图片描述

    ③查看是否安装成功:mysqladmin --version

    在这里插入图片描述

    或者也可以通过 rpm 命令来查看:

    在这里插入图片描述

    ④设置用户和密码: mysqladmin –u root password xxxxxx

    在这里插入图片描述

    一键安装脚本

    安装mysql5.7 cenos7.5

    #!/bin/bash 
    # 当前目录
    CURRENT_DIR=$(
       cd "$(dirname "$0")"
       pwd
    )
    
    #安装mysql
    #安装目录
    BASE_DIR="/home/scsdm"
    #数据库密码
    DB_PASSWORD="hancloud1234!"
    
    
    
    #关闭selinux
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && setenforce 0
    #开放防火墙端口
    sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
    sudo firewall-cmd --reload
    firewall-cmd --list-all
    
    
    install(){
    		MARIADB=$(rpm -qa|grep mariadb)
    		#卸载自带版本。
    		rpm -e --nodeps ${MARIADB}
    		#解压安装包
    		tar -xvf mysql-5.7.23-1.el7.x86_64.rpm-bundle.tar
    		#安装 mysql-community-common-5.7.23-1.el7.x86_64.rpm 
    		rpm -ivh mysql-community-common-5.7.23-1.el7.x86_64.rpm
    		#安装 mysql-community-libs-5.7.23-1.el7.x86_64.rpm 
    		rpm -ivh mysql-community-libs-5.7.23-1.el7.x86_64.rpm 
    		#安装 mysql-community-client-5.7.23-1.el7.x86_64.rpm 
    		rpm -ivh mysql-community-client-5.7.23-1.el7.x86_64.rpm
    
    		#检查 centos 是否已存在 libaio ,如果不存在,需要安装 libaio ,如果存在了,即跳过这安装 libaio 步 骤。
    		LIBAIO_ENV=$(rpm -qa|grep libaio)
    		if [[ -n "$LIBAIO_ENV" ]];then
    			echo "存在libaio,不需要安装"
    		else
    			#安装 libaio
    			rpm -ivh libaio-0.3.107-10.el6.x86_64.rpm 
    		fi	
    		#安装 mysql-community-server-5.7.23-1.el7.x86_64.rpm
    		rpm -ivh mysql-community-server-5.7.23-1.el7.x86_64.rpm
    		
    		#修改配置
    		sed -i "s#datadir=/var/lib/mysql#datadir=$BASE_DIR/mysql/3306#g" /etc/my.cnf
    		sed -i "s#socket=/var/lib/mysql/mysql.sock#socket=$BASE_DIR/mysql/3306/mysql.sock#g" /etc/my.cnf
    		cat >> /etc/my.cnf </dev/null; then
    	echo "检测到 mysql 已安装,跳过安装步骤"
    else
    	if [[ -f "$CURRENT_DIR/mysql-5.7.23-1.el7.x86_64.rpm-bundle.tar" ]]; then
    		echo "... 离线安装mysql"
    		install
    		echo "... 离线安装mysql 完成"
    	else
    		echo "... 在线安装mysql"
    		cd $CURRENT_DIR && wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.23-1.el7.x86_64.rpm-bundle.tar && wget https://repo.almalinux.org/almalinux/8.3-beta/BaseOS/x86_64/os/Packages/libaio-0.3.112-1.el8.x86_64.rpm
    		install
    		echo "... 在线安装mysql 完成"
    	fi	
    fi
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100

    2.3 Mysql 服务

    2.3.1 Mysql 服务的启动和停止

    查看状态:

    service mysql status
    
    • 1

    在这里插入图片描述

    启动服务:

    service mysql start
    
    • 1

    在这里插入图片描述

    停止服务:

    service mysql stop
    
    • 1

    在这里插入图片描述

    重启服务:

    service mysql restart
    
    • 1

    在这里插入图片描述

    启动之后,查看进程

    ps -ef | grep mysql
    
    • 1

    在这里插入图片描述

    2.3.2 Mysql 的安装位置
    参数路径解释备注
    –datadir/var/lib/mysql/mysql 数据库文件的存放路径
    –basedir/usr/bin相关命令目录mysqladmin mysqldump 等命令
    –plugin-dir/usr/lib64/mysql/pluginmysql 插件存放路径
    –log-error/var/lib/mysql/jack.atguigu.errmysql 错误日志路径
    –pid-file/var/lib/mysql/jack.atguigu.pid进程 pid 文件
    –socket/var/lib/mysql/mysql.sock本地连接时用的 unix 套接字文件
    /usr/share/mysql配置文件目录mysql 脚本及配置文件
    /etc/init.d/mysql服务启停相关脚本
    2.3.3 Mysql 服务的自启动

    Mysql 服务是开机自动启动的!

    在这里插入图片描述

    如果要取消开机自启动,则输入命令 ntsysv

    出现以下界面:

    在这里插入图片描述

    使用空格取消选中,然后按 TAB 确定!

    2.3.4 Mysql 的重复启动问题

    在这里插入图片描述

    此时查看,多了很多进程:

    在这里插入图片描述

    尝试去登录或者操作:报错!

    在这里插入图片描述

    查看服务状态:

    在这里插入图片描述

    解决:杀死所有和 mysql 进程相关的操作,然后重启服务!

    在这里插入图片描述

    注意是 mysqld,d 代表 demon,守护进程。

    然后再重启:

    在这里插入图片描述

    2.4 修改字符集

    2.4.1 常用命令
    SQL 语句描述备注
    show databases列出所有数据库
    create database 库名创建一个数据库
    create database 库名 character set utf8创建数据库,顺便执行字符集为 utf-8
    show create database 库名查看数据库的字符集
    show variables like ‘%char%’查询所有跟字符集相关的信息
    set [字符集属性]=utf8设置相应的属性为 utf8只是临时修改,当前有效。服务重启后, 失效。
    alter database 库名 character set ‘utf8’修改数据库的字符集
    alter table 表 名 convert to character set 'utf8修改表的字符集

    实验 SQL:

    CREATE database mydb;
    CREATE table mytable(id int,name varchar(30));
    insert into mytable(id,name) values (1,‘jack’);
    insert into mytable(id,name) values (2,‘张三’);
    2.4.2 字符集乱码原因

    如果在建库建表的时候,没有明确指定字符集,则采用默认的字符集 latin1,其中是不包含中文字符的。查看默认的编码字符集:

    show variables like 'char';
    
    • 1

    在这里插入图片描述

    2.4.3 永久修改

    (1)修改配置文件

    ​ 在/usr/share/mysql/ 中找到 my.cnf 的配置文件,拷贝其中的 my-huge.cnf 到 /etc/ 并命名为 my.cnf 。添加以 下内容后再重启服务。

    注意:必须将文件拷贝到指定路径,且名称为 my.cnf

    [client]
    default-character-set=utf8
    [mysqld]
    character_set_server=utf8
    character_set_client=utf8
    collation-server=utf8_general_ci
    [mysql]
    default-character-set=utf8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    再次查看:

    在这里插入图片描述

    注意:已经创建的数据库的设定不会发生变化,参数修改只对新建的数据库有效!

    (2)修改已创建库、表字符集

    修改数据库的字符集

    mysql> alter database mydb character set 'utf8';
    
    • 1

    修改数据表的字符集

    mysql> alter table mytbl convert to character set 'utf8';
    
    • 1

    (3)修改已经乱码数据

    无论是修改 mysql 配置文件或是修改库、表字符集,都无法改变已经变成乱码的数据。 只能删除数据重新插入或更新数据才可以完全解决

    2.5 设置大小写不敏感

    ①查看大小写是否敏感:

    show variables like '%lower_case_table_names%'
    
    • 1

    windows 系统默认大小写不敏感,但是 linux 系统是大小写敏感的

    在这里插入图片描述

    ②设置大小写不敏感:在 my.cnf 这个配置文件 [mysqld] 中加入 lower_case_table_names = 1 ,然后重启服务器

    属性设置描述
    0大小写敏感
    1大小写不敏感。创建的表,数据库都是以小写形式存放在磁盘上,对于 sql 语句都是转换为 小写对表和 DB 进行查找
    2创建的表和 DB 依据语句上格式存放,凡是查找都是转换为小写进行

    注意:如果要设置属性为大小写不敏感,要在重启数据库实例之前就需要将原来的数据库和表转换为小写,否则将 找不到数据库名。在进行数据库参数设置之前,需要掌握这个参数带来的影响,切不可盲目设置。

    2.6 sql_mode

    ​ sql_mode 定义了对 Mysql 中 sql 语句语法的校验规则!

    ​ sql_mode 是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些 非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在 开发测试阶段就可以发现问题。

    2.6.1 sql_mode 常用的值
    参数描述
    ONLY_FULL_GROUP_BY对于 GROUP BY 聚合操作,如果在 SELECT 中的列,没有在 GROUP BY 中出现, 那么这个 SQL 是不合法的,因为列不在 GROUP BY 从句中
    NO_AUTO_VALUE_ON_ZERO该值影响自增长列的插入。默认设置下,插入 0 或 NULL 代表生成下一个自增 长值。如果用户 希望插入的值为 0,而该列又是自增长的,那么这个选项就有 用了
    STRICT_TRANS_TABLES在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非 事务表不做限制
    NO_ZERO_IN_DATE在严格模式下,不允许日期和月份为零
    NO_ZERO_DATE设置该值,mysql 数据库不允许插入零日期,插入零日期会抛出错误而不是警告
    ERROR_FOR_DIVISION_BY_ZERO在 INSERT 或 UPDATE 过程中,如果数据被零除,则产生错误而非警告。如 果 未给出该模式,那么数据被零除时 MySQL 返回 NULL
    NO_AUTO_CREATE_USER禁止 GRANT 创建密码为空的用户
    NO_ENGINE_SUBSTITUTION如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认 的存储引擎替代,并抛出一个异常
    PIPES_AS_CONCAT将‘||’视为字符串的连接操作符而非或运算符,这和 Oracle 数据库是一样的, 也和字符串的拼接函数 Concat 相类似
    ANSI_QUOTES启用 ANSI_QUOTES 后,不能用双引号来引用字符串,因为它被解释为识别符
    ORACLE设 置 等 同 于 PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER
    2.6.2 查看和修改

    ①查看当前的 sql_mode:

     select @@sql_mode; 
    
    • 1

    ②sql_mode 的影响案例:group by 查询语法错误!

    CREATE TABLE mytbl2 (id INT,NAME VARCHAR(200),age INT,dept INT); 
    INSERT INTO mytbl2 VALUES(1,'zhang3',33,101); 
    INSERT INTO mytbl2 VALUES(2,'li4',34,101); 
    INSERT INTO mytbl2 VALUES(3,'wang5',34,102); 
    INSERT INTO mytbl2 VALUES(4,'zhao6',34,102); 
    INSERT INTO mytbl2 VALUES(5,'tian7',36,102);
    
    查询每个 dept 中年龄最大的人:SELECT NAME,dept,MAX(age) FROM mytbl2 GROUP BY dept;
    
    
    正确写法: SELECT id,name,ab.dept,ab.maxage FROM mytbl2 m INNER JOIN(SELECT dept,MAX(age) maxage FROM mytbl2
    GROUP BY dept)ab ON ab.dept=m.dept AND m.age=ab.maxage;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ③临时修改 sql_mode:

    set @@sql_mode=’....’;
    
    • 1

    ④永久修改,需要在配置文件 my.cnf 中修改:

    [mysqld] 下添加 sql_mode=‘’

    然后重启 mysql 即可

  • 相关阅读:
    Java学习之继承一
    深信服技术认证“SCSA-S”划重点:渗透测试工具使用
    canvas 轮询http接口让小车实时运动
    android opengles从帧缓存高效拷贝数据
    Day39——Dp专题
    zookeeper ACL权限控制
    【springcloud】一些项目结构模式
    Go:Gnome sort 侏儒排序(附完整源码)
    vscode使用git
    使用git将本地项目推送到远程仓库github
  • 原文地址:https://blog.csdn.net/qq_36120342/article/details/126852998