01_MySQL介绍及安装

news2024/11/16 8:19:01

#任务背景

一、真实案例

某公司现在有几套不同版本的MySQL数据库,现在大部分的生产和测试环境都已经切换到5.7版本,由于历史原因,有一套测试环境版本为MySQL-5.5。现为了将测试环境版本统一,需要将原来测试环境数据库MySQL-==5.5==版本升级到现在的MySQL-==5.7.31==,并且保证数据完整。

二、案例背后的核心技术

1)不同版本MySQL的安装(花样安装MySQL)

2)MySQL数据库版本升级(升级需要注意什么)

3)如何经过自己思考,找到一种合适的解决方案

三、今日任务场景

由于用户访问量以及用户数据越来越多,原有的单机服务器(LAMP环境)已不能满足需求,在

需要保证数据完整的前提下,现需要将原有==数据库迁移==到另外一台单独的服务器上。迁移后,保证业务正常访问。

服务器角色IP系统版本数据库版本
老服务器(LAMP)10.1.1.100Centos7.6MySQL-5.6.47
新服务器(MySQL)10.1.1.1Centos7.6MySQL-5.7.31

#任务要求

  1. 在业务维护时间段对数据库进行==备份==

  2. 将MySQL数据库从老服务器(LAMP)中迁移到新的单独MySQL数据库服务器,版本升级为5.7.31

#任务拆解

  1. 新服务器安装Centos7.6,并且==安装MySQL-5.7.31==版本数据库

  2. 停止监控、停止前端应用、停止MySQL数据库

  3. 备份数据库(省略)

  4. 迁移数据库——>同步数据库文件到新的环境中(rsync/scp)

  5. 测试验证

#涉及知识点

  1. 官方下载mysql软件包(根据需求)

  2. MySQL数据库的安装部署

  3. MySQL数据库管理员用户root密码的设置及修改

  4. mysql客户端工具的使用

#理论储备

##一、MySQL概述

###1、关系型数据库

  • RDBMS(relational database management system),既关系型数据库管理系统

  • 简单来说,关系型数据库,是指采用了==二维表格==来组织数据的数据库。

  • 常见的关系型数据库

==oracle、mysql==、DB2(IBM)、Sybase、==SQL server==(Microsoft微软)、IBM Informix

关系型数据库的最大特点就是==事务的一致性==:所以也在对事物一致性的维护中有很大的开销.

###2、事务概述

㈠ 什么是事务?

1)事务由一条或者多条sql语句组成;

2)在事务中的操作,这些sql语句要么都成功执行,要么都不执行,这就是一个事务。

==举例说明:==

  1. 登陆ATM机,输入密码;

  2. 连接数据库,验证密码;

  3. 验证成功,获得用户信息,比如存款余额等;

  4. 用户输入需要转账的金额,按下确认键;

  5. ==从后台数据库中减掉用户账户上的对应金额(update语句);==

  6. ==从后台数据库中给对方账户增加相应的金额(update语句);==

  7. 确认,退卡,走人;

㈡ 事务特点(ACID)
  • 原子性(Atomicity):

    事务中的全部操作在数据库中是不可分割的,要么==全部完成==,要么==均不执行==。

  • 一致性(Consistency):

    指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态,不能破坏关系数据的完整性以及业务逻辑上的一致性。

  • 隔离性(Isolation):

    一个事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

  • 持久性(Durability):

    持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

㈢ 应用场景

对数据的==一致性==要求较高;典型的==银行及支付系统类==;

###3、MySQL数据库介绍

  • MySQL是一种关系型数据库管理系统

  • 由瑞典MySQL AB 公司开发,目前属于Oracle旗下

  • MySQL是C/S架构

###4、MySQL数据库版本

  • 社区版:MySQL Community Edition (==GPL==)

    1. 可以看做是企业版的“广泛体验版(小白鼠版)”,未经各个专有系统平台的压力测试和性能测试

    2. 基于GPL协议发布,可以随意下载使用

    3. 没有任何官方技术支持服务

  • 企业版:MySQL Enterprise Edition(==commercial==)

    1. 提供了比较全面的高级功能、管理工具及技术支持

    2. 安全性、稳定性、可扩展性比较好

  • 集群版:MySQL Cluster CGE(==commercial==)

扩充:关于版本的命名方式如何定义?

版本说明
α(Alpha)版内测版,内部交流或者专业测试人员测试用。Bug较多,普通用户最好不要安装。
β(Beta)版公测版,专业爱好者大规模测试用,存在一些缺陷,该版本也不适合一般用户安装。
γ ( Gamma )版相当成熟的测试版,与即将发行的正式版相差无几。
==Final==正式版本
Free自由版本
==Release==发行版本
==Standard==标准版本
==Mini==迷你精简版本,只有最基本的功能
Upgrade升级版本
==GA(GenerallyAvailable)==开发团队认为该版本是稳定版,可以在较为关键的场合使用。
Retail零售版

###5、MySQL的获取

官网:www.mysql.com

###6、MySQL的安装方式

####㈠ 二进制方式安装

  • RPM版本

命名:mysql-community-server-5.7.28-1.el7.x86_64.rpm ,需要在特定linux版本下安装。

  • ==基于glibc版本==

命名:==mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz==

依赖glibc库,可以安装在通用的Linux系统下

####㈡ 源代码编译安装

命名:mysql-5.7.31.tar.gz,通用的Linux下都可以编译安装。

####㈢ 安装方式总结

安装方式优点缺点
rpm安装卸载简单可定制性差
glibc可定制性相比rpm包灵活些安装相比rpm包复杂些,需要手动初始化数据库
源码安装可定制性最强,根据需求和功能定制安装麻烦,需要手动初始化数据库

7、区分数据库和数据库实例

㈠ 什么是MySQL数据库?

数据库(database): 操作系统或存储上的==数据文件的集合==。mysql数据库中,数据库文件可以是* .frm、.MYD、.MYI、*.ibd等结尾的文件, 不同存储引擎文件类型不同。

㈡ 什么是MySQL数据库实例?

数据库实例(instance): 由==后台进程或者线程==以及一个==共享内存区==组成。共享内存可以被运行的后台线程所共享。 数据库实例才是真正操作数据库的。

注意:MySQL的后台守护程序==mysqld==是单进程多线程的工作模式。

㈢ 什么是MySQL数据库服务器?

数据库服务器(database server):部署==安装数据库实例==的服务器。

㈣ 数据库和数据库实例之间的关系是什么?

通常情况下,数据库实例和数据库是一一对应的关系,也就是==一个数据库实例对应一个数据库==; 但是,在集群环境中存在==多个数据库实例共同使用一个数据库==。oracle RAC

##二、MySQL数据库的安装

###1、glibc方式安装

####㈠ 安装须知

  • 软件包介绍

mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
说明:通用linux下的二进制包,已编译好,只需放到相应的安装目录里即可
  • 依赖库安装

shell> yum install libaio
说明:如果已安装则可以忽略,没安装需要安装

  • 默认相关选项

默认安装信息默认存放位置
安装路径/usr/local/mysql
数据目录/usr/local/mysql/data
端口号3306
socket文件/tmp/mysql.sock

####㈡ 安装步骤

参考官当:MySQL-glibc安装手册

① 安装需求
安装路径/mysql_3306
数据路径/mysql_3306/data
端口号3306

#####② 创建mysql用户

[root@node1 ~]# useradd -rs /sbin/nologin mysql
[root@node1 ~]# id mysql
uid=998(mysql) gid=996(mysql) groups=996(mysql)
③ 拷贝程序到安装目录

1)清空环境

[root@node1 ~]# rm -f /etc/my.cnf

2)创建安装目录

[root@node1 ~]# mkdir /mysql_3306

3)解压软件并拷贝到安装位置

[root@node1 src]# pwd
/usr/src
[root@node1 src]# tar -xf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
[root@node1 src]# mv mysql-5.7.31-linux-glibc2.12-x86_64/* /mysql_3306/
说明:将数据文件移动或拷贝到mysql的安装路径后,说明mysql数据库已经安装完成!!
④ 修改文件的权限
[root@node1 src]# cd /mysql_3306/
[root@node1 mysql_3306]# mkdir mysql-files
[root@node1 mysql_3306]# chown mysql:mysql mysql-files
[root@node1 mysql_3306]# chmod 750 mysql-files
说明:
mysql-files目录为secure_file_priv系统变量提供一个位置 ,该位置将导入和导出操作限制到特定目录。
⑤ 初始化数据库
[root@node1 mysql_3306]# bin/mysqld --initialize --user=mysql --basedir=/mysql_3306
特别注意:
如果更改了mysql的默认安装路径,则需要加--basedir=mysql安装路径来指定
⑥ 设置安全加密连接
[root@node1 mysql_3306]# bin/mysql_ssl_rsa_setup --datadir=/mysql_3306/data
特别注意:
由于更改了mysql的默认安装路径,则需要加--datadir=mysql数据路径来指定。
⑦ 启动数据库

1)拷贝脚本文件到指定路径,并修改脚本文件里mysql的安装和数据目录

[root@node1 mysql_3306]# cp support-files/mysql.server /etc/init.d/mysql_3306
[root@node1 mysql_3306]# grep -A 1 "^basedir" /etc/init.d/mysqld
basedir=/mysql_3306
datadir=/mysql_3306/data
注意:根据自己的安装位置和数据目录位置修改

2)启动数据库服务

[root@node1 mysql_3306]# service mysqld start

3)查看端口是否监听

[root@node1 mysql_3306]# netstat -nltp|grep 3306
㈢ 安装完后续配置
① 更改数据库管理员密码
  • 方法1:

[root@node1 mysql_3306]# bin/mysqladmin -uroot password '123' -p
Enter password:输入刚刚初始化产生的临时密码
  • 方法2

mysql> set password=password('456');        //未来版本将会弃用
或者
mysql> set password='123';                  //推荐
② 配置环境变量
[root@node1 mysql_3306]# echo "export PATH=$PATH:/mysql_3306/bin" >> /etc/profile
[root@node1 mysql_3306]# source /etc/profile
③ 编写配置文件
[root@node1 mysql_3306]# cat /mysql_3306/my.cnf
[mysqld]
basedir=/mysql_3306
datadir=/mysql_3306/data
socket=/tmp/mysql.sock
④ 数据库安全配置
[root@node1 mysql_3306]# mysql_secure_installation

###2、源码编译安装

参考官当:MySQL-Source安装配置手册

源码安装三步曲:配置——>编译——>安装

####㈠ 安装须知

  • 软件包介绍

mysql-5.7.31.tar.gz                     可在任意发行版的Linux下安装
㈡ 安装需求
安装需求具体配置
安装目录(basedir)/mysql_3307
数据目录(datadir)/mysql_3307/data
端口号3307
socket文件位置$basedir/mysql.sock
字符集utf8mb4

####㈢ ==了解配置选项==

  • 常用配置选项

配置选项描述默认值建议值
CMAKE_INSTALL_PREFIX安装基目录(basedir)/usr/local/mysql根据需求
MYSQL_DATADIR数据目录(datadir)$basedir/data根据需求
SYSCONFDIR默认配置文件my.cnf路径/etc
MYSQL_TCP_PORTTCP/IP端口3306非默认端口
MYSQL_UNIX_ADDR套接字socket文件路径/tmp/mysql.sock$basedir/
DEFAULT_CHARSET默认字符集latin1utf8mb4
DEFAULT_COLLATION默认校验规则latin1_swedish_ciutf8mb4_general_ci
WITH_EXTRA_CHARSETS扩展字符集allall
ENABLED_LOCAL_INFILE是否启用本地加载外部数据文件功能OFF建议开启
WITH_SSLSSL支持类型system建议显式指定
WITH_BOOSTBoost库源代码的位置Boost库是构建MySQL所必需的,建议事先下载
  • 存储引擎相关配置项

说明:

以下选项值均为布尔值,0或1;0代表不编译到服务器中,1代表编译,建议都静态编译到服务器中。

其他的存储引擎可以根据实际需求在安装时通过WITH_xxxx_STORAGE_ENGINE=1的方式编译到服务器中。

配置选项描述
WITH_INNOBASE_STORAGE_ENGINE将InnoDB存储引擎插件构建为静态模块编译到服务器中;建议编译到服务器中
WITH_PARTITION_STORAGE_ENGINE是否支持分区
WITH_FEDERATED_STORAGE_ENGINE本地数据库是否可以访问远程mysql数据
WITH_BLACKHOLE_STORAGE_ENGINE黑洞存储引擎,接收数据,但不存储,直接丢弃
WITH_MYISAM_STORAGE_ENGINE将MYISAM存储引擎静态编译到服务器中

####㈣ 安装步骤

① 安装依赖包

1)安装相关依赖软件

# yum -y install ncurses-devel cmake libaio-devel openssl-devel
说明:环境不一样,可能还需要安装其他依赖包,比如perl相关的包,自行解决。

2)下载Boost库源代码(选做)

wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

#####② 解压软件包

[root@node1 src]# pwd
/usr/src
[root@node1 src]# tar xf mysql-5.7.31.tar.gz
③ 根据需求进行配置

1)==进入到解压目录里配置==

[root@node1 src]# cd mysql-5.7.31/
[root@node1 mysql-5.7.31]# pwd
/usr/src/mysql-5.7.31

2)编写脚本文件进行配置(不容易出错)

[root@node1 mysql-5.7.31]# vim myconfig.sh 
cmake . \
-DCMAKE_INSTALL_PREFIX=/mysql_3307 \
-DMYSQL_DATADIR=/mysql_3307/data \
-DMYSQL_TCP_PORT=3307 \
-DMYSQL_UNIX_ADDR=/mysql_3307/mysql.sock \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_SSL=system \
-DWITH_BOOST=/mysql_3307/boost \
-DDOWNLOAD_BOOST=1(如果已经下载好,则不用再次下载)
​
[root@node1 mysql-5.7.31]# chmod +x myconfig.sh
[root@node1 mysql-5.7.31]# ./myconfig.sh
注意:
如果事先已经下载好了boost_1_59_0.tar.gz,则只需要-DWITH_BOOST=指定解压后的路径即可。

#####④ 编译并安装

[root@node1 mysql-5.7.31]# make && make install

#####⑤ 初始化数据库

注意:进入到==安装目录==里/mysql_3307

1)进入到安装目录

[root@node1 mysql-5.7.31]# cd /mysql_3307
[root@node1 mysql_3307]# pwd
/mysql_3307

2)创建系统变量secure_file_priv限制导入导出目录并修改权限

[root@node1 mysql_3307]# mkdir mysql-files
[root@node1 mysql_3307]# chown -R mysql:mysql /mysql_3307
[root@node1 mysql_3307]# chmod 750 mysql-files

3)初始化数据库

[root@node1 mysql_3307]# bin/mysqld --initialize --user=mysql --basedir=/mysql_3307 --datadir=/mysql_3307/data
注意:
千万注意需要指定当前数据库的安装路径和数据路径!

#####⑥ 启动数据库

拷贝启动脚本到/etc/init.d/目录里
[root@node1 mysql_3307]# cp support-files/mysql.server /etc/init.d/mysql_3307
[root@node1 mysql_3307]# service mysql_3307 start
Starting MySQL. SUCCESS!

####㈤ ==安装完后续配置==

① 编写配置文件
[root@node1 mysql_3307]# vim /mysql_3307/my.cnf
[mysqld]
basedir=/mysql_3307
datadir=/mysql_3307/data
socket=/mysql_3307/mysql.sock
② 设置数据库管理员密码
[root@node1 mysql_3307]# bin/mysqladmin -uroot password '123' -p
Enter password:输入初始化临时产生的密码(不显示)
​
或者进入mysql后,设置密码
mysql> set password='456';

三、客户端工具使用

1、如何访问不同的数据库?

方法一:直接使用==对应的客户==端软件访问

访问5.7.31版本数据库:
[root@node1 ~]# /mysql_3306/bin/mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.31 MySQL Community Server (GPL)
​
访问5.7.31版本数据库:
[root@node1 ~]# /mysql_3307/bin/mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.31 Source distribution
​

方法二:==定义别名==的方式访问

[root@node1 ~]# alias mysql_3306="/mysql_3306/bin/mysql"
[root@node1 ~]# alias mysql_3307="/mysql_3307/bin/mysql"
[root@node1 ~]# mysql_3306 -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.31 MySQL Community Server (GPL)
​
[root@node1 ~]# mysql_3307 -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.31 Source distribution

方法三:==拷贝相应命令==到PATH可以识别的路径下==并重命名==

[root@node1 ~]# unalias mysql_3306
[root@node1 ~]# unalias mysql_3307
+++++++++++++++++++++我是华丽分隔符+++++++++++++++++++++++++++
[root@node1 ~]# cp /mysql_3306/bin/mysql /usr/bin/mysql_3306
[root@node1 ~]# cp /mysql_3307/bin/mysql /usr/bin/mysql_3307
[root@node1 ~]# which mysql_3306
/usr/bin/mysql_3306
[root@node1 ~]# which mysql_3307
/usr/bin/mysql_3307

深度思考:我们之所以能够连接到数据库里的==本质==是什么?

2、客户端工具mysql使用

mysql: mysql命令行工具,一般用来连接访问mysql数据库
选项说明
-u, --user=name指定登录用户名
-p, --password指定登录密码(注意是小写p),一定要放到最后面
-h, --host=name指定数据库的主机地址
-P, --port=xxx指定数据库的端口号(大写P)
-S, --socket=name指定socket文件
-e, --execute=name使用非交互式操作(在shell终端执行sql语句)

扩展了解:

默认库描述
information_schema1、==对象信息数据库==,提供对数据库元数据的访问 ,有关MySQL服务器的信息,例如数据库或表的名称,列的数据类型或访问权限等; 2、在INFORMATION_SCHEMA中,有数个只读表,它们实际上是视图,而不是基本表,因此你将无法看到与之相关的任何文件; 3、视图,是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表
mysql1、mysql数据库是==系统数据库==。它包含存储MySQL服务器运行时所需的信息的表。比如权限表、对象信息表、日志系统表、时区系统表、优化器系统表、杂项系统表等。 2、==不可以删除==,也不要轻易修改这个数据库里面的表息。
performance_schemaMySQL5.5开始新增一个数据库,主要用于==收集数据库服务器性能==;并且库里表的存储引擎均PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表
sys1、mysql5.7增加了sys 系统数据库,通过这个库可以快速的了解系统的元数据信息; 2、sys库方便DBA发现数据库的很多信息,解决性能瓶颈; 3、这个库是通过视图的形式把information_schema 和performance_schema结合起来,查询出更加令人容易理解的数据

3、客户端工具mysqladmin使用

mysqladmin:客户端管理mysql数据库工具
㈠ 常用选项
选项描述
-h, --host=name指定连接数据库主机
-p, --password指定数据库密码
-P, --port=#指定数据库端口
-S, --socket=name指定数据库socket文件
-u, --user=name指定连接数据库用户
㈡ 常用命令
命令描述
password [new-password]更改密码
reload刷新授权表
shutdown停止mysql服务
status简短查看数据库状态信息
start-slave启动slave
stop-slave停止slave
variables打印可用变量
version查看当前mysql数据库的版本信息
㈢ 举例说明
关闭数据库
[root@node1 ~]# mysqladmin shutdown -p
默认修改数据库管理员root密码
[root@node1 ~]# mysqladmin password 'newpass' -p
[root@node1 ~]# mysqladmin password '123' -uroot -h localhost -p
​
查看扩展信息,比如变量
[root@node1 ~]# mysqladmin proc extended-status -p
创建数据库
[root@node1 ~]# mysqladmin create db01 -p
删除数据库
[root@node1 ~]# mysqladmin drop db01 -p

##四、如何重置管理员root密码

敲黑板:找问题的解决方法很重要!

1、跳过授权表(通用)

㈠ 跳过授权表重启数据库
① 关闭数据库
[root@node1 ~]# mysqladmin shutdown -p
Enter password:
② 跳过授权表启动

友情提示:启动过程可能会一波三折,冷静分析看报错,必能解决!

# /mysql_3306/bin/mysqld --defaults-file=/mysql_3306/my.cnf --skip-grant-tables --skip-networking=on  --user=mysql &
㈡ 刷新授权表(重要)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
㈢ 修改密码
mysql> alter user 'root'@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)

==补充:==如果未能成功,则使用以下语句修改密码

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass')
WHERE User = 'root' AND Host = 'localhost';
mysql> FLUSH PRIVILEGES;

2、Unix和类Unix系统重置

㈠ 停止数据库
[root@node1 ~]# mysqladmin shutdown -p
Enter password:
㈡ 编写创建密码语句到文件
# echo "ALTER USER 'root'@'localhost' IDENTIFIED BY '123';" >> /mysql_3306/mysql.pass
注意:该文件一定要对启动用户如mysql有所有权限
# chown -R mysql. /mysql_3306
㈢ 指定密码文件启动数据库
# mysqld --defaults-file=/mysql_3306/my.cnf --init-file=/mysql_3306/mysql.pass  --user=mysql &
㈣ 删除密码文件,并测试
# rm -f /mysql_3306/mysql.pass
# mysql -uroot -p

五、数据库升级

敲黑板:找解决方案很重要!

1、升级前须知

2、根据实际情况找方案

㈠ 当前实际情况

㈡ 此次任务解决方案

1、就地升级后——>迁移数据到新服务器

2、新服务器安装新版本软件——>导入业务数据

3、落地实现

㈠ 环境说明
服务器角色数据库版本IP地址主机名
原WEB服务器(LAMP)MySQL-5.6.4710.1.1.100web.heima.cc
新数据库服务器(MySQL)MySQL-5.7.25(已安装)10.1.1.1db01.heima.cc
㈡ 停止前端业务(web服务)
[root@web ~]# systemctl stop httpd
㈢ 从原数据库中导出所有数据(5.6.47)
[root@web ~]# mysqldump -u root -p --add-drop-table --all-databases --force > /tmp/old_data_full.sql
​
[root@web ~]# systemctl stop mysqld     //转储完毕,停止原数据库服务
选项描述
--add-drop-table在每个create table语句前执行drop table
--all-databases转储所有数据库中的所有表
--force忽略所有错误;即使在表转储期间发生SQL错误,也要继续操作
㈣ 拷贝原所有数据到新数据库服务器
① 确保新数据库服务器正常

新数据库环境说明:

IPhostnamebasedirdatadirportsocketversion
10.1.1.1db01.heima.cc/mysql_3306$basedir/data3306/tmp/mysql.sockmysql-5.7.25

当前数据库状态:

[root@db01 ~]# netstat -nltp|grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      7453/mysqld
[root@db01 ~]# mysql_3306 -uroot -e 'show databases;' -p
Enter password:
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
② 远程拷贝转储文件到新服务器
[root@web ~]# scp /tmp/old_data_full.sql 10.1.1.1:/tmp/
㈤ 导入数据到新的数据库中
[root@db01 ~]# mysql_3306 -uroot -p < /tmp/old_data_full.sql
Enter password:
㈥ 刷新授权表
[root@db01 ~]# mysqladmin flush-privileges -uroot -p
㈦ 检查所有表是否与当前版本不兼容
[root@db01 ~]# mysql_upgrade -p
㈧ 修改应用程序指向新数据库
[root@web html]# pwd
/var/www/html
[root@web html]# vim config.php
<?php
$pe['db_host'] = '10.1.1.1'; //数据库主机地址
$pe['db_name'] = 'myshop'; //数据库名称
$pe['db_user'] = 'root'; //数据库用户名
$pe['db_pw'] = '123'; //数据库密码
$pe['db_coding'] = 'utf8';
$pe['url_model'] = 'pathinfo_safe'; //url模式,可选项(pathinfo/pathinfo_safe/php)
define('dbpre','pe_'); //数据库表前缀
?>
㈨ 新数据库服务器添加授权
mysql> create user root@10.1.1.100 identified by '123';
mysql> grant all on myshop.* to root@10.1.1.100;
mysql> flush privileges;
㈩ 启动web服务测试验证
[root@web html]# systemctl start httpd

4、经验分享

情况1:马同学接到任务后的一个神操作就是,自顾自的停数据库,进行迁移测试

情况2:

马同学好不容易把数据迁移到新版本了,结果发现启动报错,配置文件某个参数导致,二话不说就把它给删了,起来了。

总结:这种操作简直就是马路杀手啊,同学们!

#课程目标

  • 能够通过官方网站获取相应的MySQL软件包及相关手册
  • 理解MySQL数据库实例和数据库的含义
  • 能够使用glibc方式安装MySQL数据库
  • 能够使用源码包的MySQL数据库
  • 能够使用客户端工具mysql连接数据库

#课后扩展

##一、字符集与字符编码

==字符:==

字符是各种文字符号的总称,包括各个国家文字、标点符号、图形符号、数字等。

==字符集:==

字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。也就是说字符编码是字符集的实现方式。

需要注意的是:有的字符编码和字符集的名称是一致的。

1、常见的字符集

字符集描述
Unicode统一字符集,它包含了几乎世界上所有的已经发现且需要使用的字符如:中文、日文、英文、德文等
ASCII早期的计算机系统只能处理英文,所以ASCII也就成为了计算机的缺省字符集,包含了英文所需要的所有字符
GB2312中文字符集,包含ASCII字符集
GBK是GB2312的扩展,但完整包含了GB2312的所有内容
GB18030是GBK字符集的超集,常叫大汉字字符集,也叫CJK(Chinese,Japanese,Korea)字符集,包含了中、日、韩三国语言中的所有字符。

2、常见的字符编码

  • ASCII

    在 ASCII 编码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间

  • UTF-8(Unicode)

    1)UTF-8编码是在互联网上使用最广的一种Unicode字符集的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。

    2)UTF-8编码最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

    3)UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节。

  • GBK/GB2312(中文)和GB18030(CJK)

    国家编码,通用型不如UTF-8,每个字符均占2个字节。

3、MySQL中字符集的建议

1)非常肯定只有中文终端用户时,可选择gbk/gb2312字符集,否则选用utf8mb4字符集。

2)为了方便数据迁移、以及多种终端展示,最好使用utf8mb4。

3)在mysql中utf8最多存放3个字节,而非实际的1-4个字节,为了不必要的麻烦建议utf8mb4。

4)字符无需区分大小写时,采用默认的==xxx_general_ci==校验集,否则选择==xxx_bin==校验集(生产环境中,尽量不要修改校验集).

  • 根据字符集查看校验集

mysql> show collation where charset = 'utf8mb4';

##二、systemd管理mysql

==注意:以下mysqld.service文件内容适用于mysql 5.7版本以后(参考)==

[root@misshou ~]#vim /usr/lib/systemd/system/mysqld.service
[Unit]  #该小节包含与单元类型无关的通用信息
#描述信息
Description=MySQL Server
#帮助手册
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
#定义unit启动顺序,After表示当前unit晚于以下两个单元启动
After=network.target
After=syslog.target
[Install] #该小节包含单元的启用信息,systemctl的enable与disable命令在启用/停用单元时才会使用此小节。
WantedBy=multi-user.target
#依赖multi-user.target单元,执行systemctl enable 启用命令之后,将会建立一个指向该单元文件的软链接/etc/systemd/system/multi-user.target.wants/mysql.service,表示将mysql.service包含到 multi-user.target目标中,这样,当启动multi-user.target目标时,将会自动起动mysql.service服务。 同时,systemctl disable 命令将会删除这个软连接。
​
[Service]
User=mysql
Group=mysql
#设置进程的启动类型, 必须设为 simple, forking, oneshot, dbus, notify, idle之一。
如果设为forking,那么表示ExecStart=xxx进程将会在启动过程中使用fork()系统调用。 这是传统UNIX守护进程的经典做法。也就是当所有的通信渠道都已建好、启动亦已成功之后,父进程将会退出,而子进程将作为该服务的主进程继续运行。 对于此种进程,建议同时设置 PIDFile=xxx选项,以帮助systemd准确定位该服务的主进程,进而加快后继单元的启动速度。
如果设置为simple表示ExecStart=xxx进程就是该服务的主进程.
Type=forking
PIDFile=/var/run/mysqld/mysqld.pid
# Disable service start and stop timeout logic of systemd for mysqld service.
#设置该服务允许的最大启动时长。 如果守护进程未能在限定的时长内发出"启动完毕"的信号,那么该服务将被视为启动失败,并会被关闭。 如果未指定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。 设为 "infinity" 则表示永不超时。 当 Type=oneshot 时, 默认值为 "infinity" (永不超时), 否则默认值等于 DefaultTimeoutStartSec= 的值(参见 systemd-system.conf(5) 手册)。
TimeoutSec=0
# Execute pre and post scripts as root
#设为yes表示所有与权限相关的执行选项(例如 User= 之类的选项),仅对 ExecStart= 中的程序有效,而对 ExecStartPre=, ExecStartPost=, ExecReload=, ExecStop=, ExecStopPost= 中的程序无效。 默认值 no表示所有与权限相关的执行选项,对所有 Exec*= 系列选项中的程序都有效。
PermissionsStartOnly=true
# Needed to create system tables
#设置在执行ExecStart=之前执行的命令行
ExecStartPre=/usr/bin/mysqld_pre_systemd
# Start main service
#在启动该服务时需要执行的命令行(命令+参数)。
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS
# Use this to switch malloc implementation
#设置进程的环境变量,文件必须用绝对路径表示(可以包含通配符)。但可在路径前加上"-"前缀表示忽略不存在的文件。可以多次使用此选项,以从多个不同的文件中读取设置。若设为空,则表示清空所有先前已经从文件中读取的环境变量。
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
#进程打开文件的数量(文件描述符的数量),ulimit -n
LimitNOFILE = 5000
#当服务进程正常退出、异常退出、被杀死、超时的时候,是否重新启动该服务。on-failure表示仅在服务进程异常退出时重启
Restart=on-failure
#可以设为一系列以空格分隔的数字退出码或信号名称,当进程的退出码或收到的信号与此处的设置匹配时,无论 Restart= 是如何设置的,该服务都将无条件的禁止重新启动。这里1表示当进程的退出码为1和SIGHUP信号时不会导致该服务被自动重启。
RestartPreventExitStatus=1
#设为true表示在进程的文件系统名字空间中挂载私有的/tmp与/var/tmp目录,也就是不与名字空间外的其他进程共享临时目录。这样做会增加进程的临时文件安全性,但同时也让进程之间无法通过/tmp或/var/tmp目录进行通信。同时,当服务停止之后,所有先前在临时目录中创建的文件都将被删除。默认是false。注意,因为此选项的设置有可能在实际上无法落实(例如挂载名字空间不可用), 所以,在编写单元文件的时候,不应该将单元的安全依赖于此选项必然生效的假定。
PrivateTmp=false
​

==以下文件内容,适用于mysql5.6版本(参考):==

[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
Type=simple
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Needed to create system tables
#ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd
# Start main service
#以下启动方式也可以使用mysqld_safe程序,助于5.6主程序不支持--daemonize选项
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 5000
Restart=on-failure
PrivateTmp=false
RestartPreventExitStatus=1

三、关于5.7开启SSL连接讨论

  1. MySQL5.7默认是开启SSL连接,如果强制用户使用SSL连接,那么应用程序的配置也需要明确指定SSL相关参数,否则程序会报错。

  2. 虽然SSL方式使得安全性提高了,但是对于性能有相应影响,所以要谨慎选择,参考如下:

    1)对于非常敏感核心的数据,或者QPS(Queries Per Second)本来就不高的核心数据,可以采用SSL方式保障数据安全性;

    2)对于采用短链接、要求高性能的应用,或者不产生核心敏感数据的应用,性能和可用性才是首要,建议不要采用SSL方式;

注解:

[glibc]  glibc是GNU发布的libc库,即c运行库;glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1250818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux:创建进程 -- fork,到底是什么?

相信大家在初学进程时&#xff0c;对fork函数创建进程一定会有很多的困惑&#xff0c;比如&#xff1a; 1.fork做了什么事情?? 2.为什么fork函数会有两个返回值?3.为什么fork的两个返回值&#xff0c;会给父进程谅回子进程pid&#xff0c;给子进程返回0?4.fork之后:父子进…

哨兵1号回波数据(L0级)包格式解析与成像参数提取

坑爹的格式,具体有多坑往下看就知道了。matlab代码在文末。 先上首字母缩写: 再来回波数据包的格式图 1. 数据包格式 众所周知,解包的第一步是找帧头和帧长,找到第4~5字节,帧长码为“0x3761”,转十进制为14777,然而实际第一帧整帧的长度是14184。。。你要是加6我还能…

机器学习与因果推断的高级实践 | 数学建模

文章目录 因果推断因果推断的前世今生&#xff08;1&#xff09;潜在结果框架&#xff08;Potential Outcome Framework&#xff09;&#xff08;2&#xff09;结构因果模型&#xff08;Structual Causal Model&#xff0c;SCM&#xff09; 身处人工智能爆发式增长时代的机器学…

LeetCode OJ循环队列(C语言)

1.题目的初步分析 我们分析上述题目的时候会发现题目非常的长&#xff0c;不好整理思路&#xff0c;我这里可以大致的将本题的几个核心点说出来&#xff1a; 1.队列的思路 循环队列说来说去不还是队列嘛&#xff0c;那么队列的基本操作增删查改、以及队列的基本结构肯定都是不能…

京东家用电器商品电子说明书在哪里能找到怎么查看产品电子说明书?草柴返利APP如何查询领取京东优惠券拿京东购物返利?

京东商品电子说明书是一种便捷、高效的说明工具&#xff0c;为消费者了解和使用商品提供了重要帮助。京东商品电子说明书是一种以电子文档、图文、视频的形式提供的商品使用说明书。它通常由商家上传至京东平台&#xff0c;以供消费者在购买商品后下载查看。与传统的纸质说明书…

计算机编程零基础编程学什么语言,中文编程工具构件简介软件下载

计算机编程零基础编程学什么语言&#xff0c;中文编程工具构件简介软件下载 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件&#xff0c;象如…

Leetcode—94.二叉树的中序遍历【简单】

2023每日刷题&#xff08;四十&#xff09; Leetcode—94.二叉树的中序遍历 C语言实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Note: The returned array mus…

Java实现—数据结构 1.初识集合框架

一、什么是集合框架 Java集合框架&#xff0c;又被称为容器&#xff0c;是定义在java.util包下的一组接口interfaces和其实现类classes 其主要表现为将多个元素element置于一个单元中&#xff0c; 集合框架是由若干个类组成的&#xff0c;每个类的背后就是一种数据结构&…

2023.11.25更新关于mac开发APP(flutter)的笔记与整理(实机开发一)

我自己写的笔记很杂&#xff0c;下面的笔记是我在chatgpt4的帮助下完成的&#xff0c;希望可以帮到正在踩坑mac开发APP&#xff08;flutter&#xff09;的小伙伴 目标&#xff1a;通过MAC电脑使用flutter框架开发一款适用于苹果手机的一个APP应用 本博客的阅读顺序是&#xf…

2022年06月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 点击绿旗,舞台上的角色会说出? A:2022年5月1日 B:1日5月2022年 C:2022年05月01日 D:05月01日2022年 答案:C 输出为:2022年05月01日。 第2题 观察规律,请问橙色方块应填…

小程序项目:node+vue基于微信小程序的校园盲盒小程序的设计与实现

项目介绍 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时…

frp V0.52.3 搭建

下载 https://github.com/fatedier/frp/releases/ 此版本暂时没有windows的&#xff0c;想在windows使用请下载v0.52.2 简易搭建 frps.toml的配置文件&#xff0c;以下12000、8500需要在云服务器中的防火墙中开放tcp # bindPort为frps和frpc通信的端口&#xff0c;需要在防…

QT已有项目导入工程时注意事项

文章目录 从qt其他版本上开发的工程导入另一qt版本时 从qt其他版本上开发的工程导入另一qt版本时 这里以之前在qt5.12.2上开发的项目为例&#xff0c;现在到在qt6.5.3上运行。 不能直接导入IDE上&#xff0c;否则会报各种莫名奇妙的错误。 首先要把扩展名位.pro.user文件 删掉…

电子学会C/C++编程等级考试2021年03月(二级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:石头剪刀布 石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。 一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头…

[JVM] 京东一面~说一下Java 类加载过程

系统加载 Class 类型的文件主要三步&#xff1a;加载->连接->初始化。连接过程又可分为三步&#xff1a;验证->准备->解析。 通过全限定名来加载生成 class 对象到内存中&#xff0c;然后进行验证这个 class 文件&#xff0c;包括文件格式校验、元数据验证&#xf…

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步?

【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步&#xff1f; 文章目录 【超强笔记软件】Obsidian如何实现免费无限流量无套路云同步&#xff1f;一、简介软件特色演示&#xff1a; 二、使用免费群晖虚拟机搭建群晖Synology Drive服务&#xff0c;实现局域网同步1 安…

AssembleRH850.dll未能加载或找不到

AssembleRH850.dll未能加载或找不到 省流解决方案 省流 经过卸了反复重装、杀毒、系统dll修复&#xff0c;百般折腾&#xff0c;是这一堆东西在搞鬼。解决方案 下载DirectX修复工具&#xff08;增强版&#xff09;&#xff0c;专门修复上述的C问题。

微信小程序 基于Android的共享付费自习室座位选座系统uniAPP

题目&#xff1a; 基于Android的共享自习室APP设计与实现 (学校要求&#xff1a;数据库不少于有逻辑关系的20个表&#xff0c;系统功能不少于60个功能点&#xff09; 技术&#xff1a; 功能&#xff1a; 1. 用户端&#xff1a; 一、首页&#xff1a; &#xff08;1&…

群晖(Synology)NAS 存储池修复需要的时间

群晖&#xff08;Synology&#xff09;NAS 存储池的处理可以说是非常耗时的。 根据官方文档的说明和算法&#xff1a; 一个 10TB 的存储池修复将会差不多 24 个小时。 如果你更换硬盘后对存储池进行处理的话&#xff0c;通常需要等上个几天时间吧。 群晖&#xff08;Synology…

XShell新建会话指南

XShell新建会话 我们先登录我们的xshell&#xff0c;连接我们的远程服务器 为了方便我们以后的使用&#xff0c;我们可以新建一个会话记住用户 新建好后&#xff0c;我们可以打开这个会话 我们选择记住用户名 然后继续输密码就可以了 之后我们每次打开xshell的时候&#xff0c…