MySQL简介及安装
什么是数据?
数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的的原始素材。
数据可以是连续的值,比如声音、图像,称为模拟数据。也可以是离散的,如符号、文字,称为数字数据。
在计算机系统中,数据以二进制信息单元0,1的形式表示。
数据的定义: 数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。*
1 2 3 4 5 5.6 5.7 版本是市面上用得最多的版本 linux中数据储存在文件系统里面 将代码的数据格式转换为JSON格式:叫序列化 将代码接收到的JSON格式的数据后,转化成自己的代码,叫:反序列化
数据库管理系统类型
关系型数据库 RDBMS
所有的表都是有二维表组成
表与表之间有关联
使用SQL(结构化查询语言)语句来管理
非关系型数据库
不需要使用SQL语句,没有二维表
关系型数据库和非关系型数据库常见的应用
关系型:MySQL、mariadb、Oracle、PostgreSQL、MMSQL
非关系型:Rdis(键值对)、MongDB(文档型数据库)、elasticsearch(搜索引擎数据库)、memcache(键值对)
InfluxDB/OpenTSDB:Time Series 时序数据库(适合出图,查询时间轴数据方便)
etcd:键值对数据库(配置文件管理中心,所有的web连到他,就可以读取配置)
JAVA程序,有自己的管理中心zookeeper,搭配kafka使用
MySQL安装方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1. rpm、yum安装:安装方便、安装速度快,无法定制 2. 二进制:不需要安装,解压即可使用,不能定制功能 3. 编译安装 3.1 可定制,安装慢 3.2 四个步骤: 3.2.1 解压(tar) 3.2.2 生成(./configure)cmake 3.2.3 编译(make) 3.2.4 安装(make install) 3.3 5.5版本之前:tar ./configure make make install 3.4 5.5版本之后:cmake gmake 4. 先编译,然后定制rpm包,制作yum仓库,然后yum安装 4.1 简单,速度快,可定制,比较复杂,制作时间极长 5. 企业中选择的安装方式 5.1 中小型企业:以上方式都可以,运维偏向编译,dba偏向二进制 运维也偏向二进制 5.2 大型企业:可以选择: 先编译然后定制rpm包,制作yum仓库,然后yum安装 6. docker容器
下载Mysql安装包
https://www.mysql.com/
1 2 3 4 MYSQL5.6:GA 6-12个月,就是他发布到现在你的具体时间,过了多久,选择在6-12个月内,小版本号为偶数的 MySQL5.7:GA 6-12个月,小版本号为偶数版的,5.7.20以上版本(MGR是MySQL自带的高可用功能)
方式一:源码安装mysql5.6
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 1、#解压 [root@db01 ~]# mkdir /app [root@db01 ~]# tar xf mysql-5.6.50.tar.gz 2、#源码安装需要cmake命令、依赖 [root@db01 ~]# yum -y install cmake openssl-devel ncurses-devel 3、#生成,需要先加入工作目录 [root@db01 ~]# cd mysql-5.6.50/ cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql-5.6.50 \ -DMYSQL_DATADIR=/app/mysql-5.6.50/data \ -DMYSQL_UNIX_ADDR=/app/mysql-5.6.50/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 cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql-5.6.50 \ -DMYSQL_DATADIR=/app/mysql-5.6.50/data \ -DMYSQL_UNIX_ADDR=/app/mysql-5.6.50/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 如果cmake失败,请将CMakeCache.txt缓存移除 4、#编译、安装 [root@db01 mysql-5.6.50]# make && make insatll 5、创建mysql程序用户 [root@db01 ~]# useradd mysql -s /sbin/nologin -M 6、#修改MySQL的配置文件到只留下[mysqld]标签 [root@db01 ~]# vim /etc/my.cnf [mysqld] 7、#拷贝启动脚本 [root@db01 ~]# cp /app/mysql-5.6.50/support-files/mysql.server /etc/init.d/mysqld 8、#启动 [root@db01 ~]# /etc/init.d/mysqld start
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 9、#解决办法,安装perl模块,再初始化MYSQL 不要安装perl-devel,这里面是perl的所有模块,这样装的模块太多了,只需要安装autoconf这个模块 [root@db01 ~]# yum -y install autoconf [root@db01 ~]# /app/mysql-5.6.50/scripts/mysql_install_db --user=mysql --basedir=/app/mysql-5.6.50 --datadir=/app/mysql-5.6.50/data 执行完成之后,找到2个ok,就初始化完成了 10、#再次启动 还是报错 [root@db01 ~]# /etc/init.d/mysqld start Starting MySQL.Logging to '/app/mysql-5.6.50/data/db01.err' . 240807 23:35:33 mysqld_safe Directory '/app/mysql-5.6.50/tmp' for UNIX socket file don't exists. ERROR! The server quit without updating PID file (/app/mysql-5.6.50/data/db01.pid). #报错原因:指定soket文件存放在/app/mysql-5.6.50/tmp,而且存放soket文件的目录没有权限 #解决办法 [root@db01 ~]# mkdir /app/mysql-5.6.50/data/db01.err [root@db01 ~]# chown -R mysql.mysql /app 11、#再次启动 成功 [root@db01 ~]# /etc/init.d/mysqld start Starting MySQL... SUCCESS! 12、#添加环境变量 [root@db01 ~]# echo ' export PATH="/app/mysql-5.6.50/bin:$PATH " ' > /etc/profile.d/mysql.sh [root@db01 ~]# source /etc/profile
方法二:二进制安装
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 1、下载二进制包 [root@db02 ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz 2、创建app目录,并解压,改名 [root@db02 ~]# mkdir /app [root@db02 ~]# tar xf mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz -C /app [root@db02 ~]# mv /app/mysql-5.6.50-linux-glibc2.12-x86_64/ /app/mysql-5.6.50 3、创建mysql程序用户 [root@db02 ~]# useradd mysql -s /sbin/nologin -M 4、拷贝MySQL的配置文件到etc下,并把配置文件内的注释清除掉,只留下[mysqld] [root@db02 ~]# \cp /app/mysql-5.6.50/support-files/my-default.cnf /etc/my.cnf [root@db02 ~]# vim /etc/my.cnf [mysqld] 5、拷贝启动脚本 [root@db02 ~]# cp /app/mysql-5.6.50/support-files/mysql.server /etc/init.d/mysqld 6、初始化MYSQL [root@db02 ~]# /app/mysql-5.6.50/scripts/mysql_install_db --user=mysql --basedir=/app/mysql-5.6.50 --datadir=/app/mysql-5.6.50/data FATAL ERROR: please install the following Perl modules before executing /app/mysql-5.6.50/scripts/mysql_install_db: Data::Dumper 安装perl模块 [root@db02 ~]# yum -y install autoconf [root@db02 ~]# /app/mysql-5.6.50/scripts/mysql_install_db --user=mysql --basedir=/app/mysql-5.6.50 --datadir=/app/mysql-5.6.50/data ok ... ok WARNING: Default config file /etc/my.cnf exists on the system This file will be read by default by the MySQL server If you do not want to use this, either remove it, or use the --defaults-file argument to mysqld_safe when starting the server 执行成功 [root@db02 ~]# ll /app/mysql-5.6.50/support-files/ total 32 -rwxr-xr-x 1 7161 31415 1153 Sep 23 2020 binary-configure -rw-r--r-- 1 7161 31415 773 Sep 23 2020 magic -rw-r--r-- 1 7161 31415 1126 Sep 23 2020 my-default.cnf#配置文件 -rwxr-xr-x 1 7161 31415 1061 Sep 23 2020 mysqld_multi.server -rwxr-xr-x 1 7161 31415 894 Sep 23 2020 mysql-log-rotate -rwxr-xr-x 1 7161 31415 10565 Sep 23 2020 mysql.server#启动脚本 7、启动mysql [root@db02 ~]# /etc/init.d/mysqld start /etc/init.d/mysqld: line 244: my_print_defaults: command not found /etc/init.d/mysqld: line 264: cd : /usr/local/mysql: No such file or directory Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe) 原因:二进制安装的mysql,mysql没有安装在/usr/local/mysql目录下 #解决方法一:修改配置文件 (推荐这个方法,因为在读取的时候优先读取配置文件) [root@db02 ~]# vim /etc/my.cnf [mysqld] basedir=/app/mysql-5.6.50 datadir=/app/mysql-5.6.50/data #解决方法二:修改脚本 [root@db02 ~]# vim /etc/init.d/mysqld 底行模式输入: %s#/usr/local/mysql#/app/mysql-5.6.50#g #再次启动,启动成功 [root@db02 ~]# /etc/init.d/mysqld start Starting MySQL.Logging to ' /app/mysql-5.6.50/data/db02.err'. .... SUCCESS! 8、登陆mysql [root@db02 ~]# mysql -bash: mysql: command not found #添加环境变量 [root@db02 ~]# echo ' export PATH="/app/mysql-5.6.50/bin:$PATH " ' > /etc/profile.d/mysql.sh [root@db02 ~]# source /etc/profile 9、登陆连接数据库 [root@db02 ~]# mysql mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 脚本不能写source /etc/profile ,会不生效
源码安装MYSQL5.7
MySQL5.6与MySQL5.7安装的区别
1、cmake的时候加入了bostorg
2、初始化时 使用mysqld --initialize 替代mysql_install_db,其它参数没有变化:–user= --basedir= --datadir=
3、–initialize会生成一个临时密码
4、还可以用另外一个参数–initialize-insecure
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 1、下载源码包到root目录 [root@db03 ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz [root@db03 ~]# wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.44.tar.gz 2、安装依赖 [root@db03 mysql-5.7.44]# yum -y install cmake openssl-devel ncurses-devel autoconf 3、创建app目录,并解压,改名 [root@db03 ~]# mkdir /app [root@db03 ~]# tar xf boost_1_59_0.tar.gz -C /app/ [root@db03 ~]# cd mysql-5.7.44/ [root@db03 ~]# cd /app/mysql-5.7.44/ cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql-5.7.44 \ -DWITH_BOOST=/app/boost_1_59_0/ \ -DMYSQL_DATADIR=/app/mysql-5.7.44/data \ -DMYSQL_UNIX_ADDR=/app/mysql-5.7.44/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 [root@db03 mysql-5.7.44]# make && make install 4、创建用户,创建数据库目录 [root@db03 mysql-5.7.44]# useradd mysql -s /sbin/nologin -M [root@db04 ~]# vim /etc/my.cnf [mysqld] basedir=/app/mysql-5.7.44 datadir=/app/mysql-5.7.44/data [root@db04 ~]# cp /app/mysql-5.7.44/support-files/mysql.server /etc/init.d/mysqld [root@db04 ~]# cd /app/mysql-5.7.44/ 5、#创建data目录,并授予相关权限 root@db04 mysql-5.7.44]# mkdir {mysql-files,data,tmp} [root@db04 mysql-5.7.44]# chown -R mysql.mysql /app/ 6、#初始化数据库 生成一个随机密码 [root@db04 mysql-5.7.44]# /app/mysql-5.7.44/bin/mysqld --initialize --user=mysql --basedir=/app/mysql-5.7.44 --datadir=/app/mysql-5.7.44/data ..... .... 2024-08-07T21:01:19.358769Z 1 [Note] A temporary password is generated for root@localhost: XaD%I7h-&laU 7、启动 [root@db04 mysql-5.7.44]# /etc/init.d/mysqld start Starting MySQL.Logging to '/app/mysql-5.7.44/data/db04.err' . .. SUCCESS! 8、#添加环境变量 [root@db03 ~]# echo 'export PATH="/app/mysql-5.7.44/bin:$PATH"' > /etc/profile.d/mysql.sh [root@db03 ~]# source /etc/profile 9、#登陆使用随机密码登陆 [root@db03 mysql-5.7.44]# mysql -uroot -p'XaD%I7h-&laU' mysql> show databases; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 10、#提醒需要重新设置密码 mysql> ALTER USER 'root' @'localhost' IDENTIFIED BY '123' ; Query OK, 0 rows affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
二进制安装MYSQL5.7
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 1、下载二进制包 [root@db04 ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-linux-glibc2.12-x86_64.tar 解压出来有2个包,删除带test 的包 2、创建/app,并把解压后的文件放到/app目录 [root@db04 ~]# mkdir /app [root@db04 ~]# tar xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz -C /app/ [root@db04 ~]# mv /app/mysql-5.7.44-linux-glibc2.12-x86_64/ /app/mysql-5.7.44 3、#在生产环境中,一定要在运行的数据库,拷贝其他数据库的配置文件 [root@db04 ~]# useradd mysql -s /sbin/nologin -M [root@db04 mysql-5.7.44]# vim /etc/my.cnf [mysqld] basedir=/app/mysql-5.7.44 datadir=/app/mysql-5.7.44/data [root@db04 ~]# cp /app/mysql-5.7.44/support-files/mysql.server /etc/init.d/mysqld [root@db04 ~]# cd /app/mysql-5.7.44/ 4、#创建data目录,并授予相关权限 root@db04 mysql-5.7.44]# mkdir {mysql-files,data} [root@db04 mysql-5.7.44]# chown -R mysql.mysql /app/ 5、#初始化数据库 生成一个随机密码 [root@db04 mysql-5.7.44]# /app/mysql-5.7.44/bin/mysqld --initialize --user=mysql --basedir=/app/mysql-5.7.44 --datadir=/app/mysql-5.7.44/data 2024-08-07T17:43:11.896232Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2024-08-07T17:43:18.143399Z 0 [Warning] InnoDB: New log files created, LSN=45790 2024-08-07T17:43:19.266013Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 2024-08-07T17:43:19.354535Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 88a4a42a-54e4-11ef-8129-000c2961c317. 2024-08-07T17:43:19.358779Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 2024-08-07T17:43:20.532115Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher. 2024-08-07T17:43:20.532142Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher. 2024-08-07T17:43:20.540163Z 0 [Warning] CA certificate ca.pem is self signed. 2024-08-07T17:43:20.824069Z 1 [Note] A temporary password is generated for root@localhost: ?-h9g5kg9g%K 如果数据库崩溃了,需要重新初始化,就要rm -rf /data 然后再初始化 6、#启动 [root@db04 mysql-5.7.44]# /etc/init.d/mysqld start Starting MySQL.Logging to '/app/mysql-5.7.44/data/db04.err' . .. SUCCESS! 7、#添加环境变量 [root@db03 ~]# echo 'export PATH="/app/mysql-5.7.44/bin:$PATH"' > /etc/profile.d/mysql.sh [root@db03 ~]# source /etc/profile 8、#登陆使用随机密码登陆 [root@db04 mysql-5.7.44]# mysql -uroot -p'?-h9g5kg9g%K' mysql> show databases; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 9、#提醒需要重新设置密码 mysql> ALTER USER 'root' @'localhost' IDENTIFIED BY '123' ; Query OK, 0 rows affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
使用systemd管理数据库
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 1、查看mysql的源生启动命令 [root@db02 ~]# ps -ef |grep mysql root 9719 1 0 Aug08 pts/0 00:00:00 /bin/sh /app/mysql-5.6.50/bin/mysqld_safe --datadir=/app/mysql-5.6.50/data --pid-file=/app/mysql-5.6.50/data/db01.pid /app/mysql-5.6.50/bin/mysqld_safe --datadir=/app/mysql-5.6.50/data --pid-file=/app/mysql-5.6.50/data/db01.pid 2、#拷贝sshd的启动脚本,并改成mysql的 [root@db02 ~]# cp /usr/lib/systemd/system/{sshd,mysqld}.service [root@db02 ~]# ll /usr/lib/systemd/system/mysqld.service -rw-r--r-- 1 root root 373 Aug 8 18:35 /usr/lib/systemd/system/mysqld.service 3、编辑启动文件 [root@db02 ~]# vim /usr/lib/systemd/system/mysqld.service [Unit] Description=mysql server Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.service Wants=sshd-keygen.service [Service] ExecStart=/app/mysql-5.6.50/bin/mysqld_safe --datadir=/app/mysql-5.6.50/data --pid-file=/app/mysql-5.6.50/data/db02.pid ExecReload=/bin/kill -HUP $MAINPID KillMode=killall mysqld Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target