MySQL安装和基本使用

分类: 约彩365ios下载 时间: 2026-06-23 09:37:11 作者: admin 阅读: 4601

1 MySQL介绍

1.1 MySQL系列

1.1.1 MySQL 的三大主要分支

MySQL

Mariadb

Percona Server

1.1.2 官方网址

https://www.mysql.com/

http://mariadb.org/

https://www.percona.

1.1.3 官方文档

https://dev.mysql.com/doc/

https://mariadb.com/kb/en/

https://www.percona.com/software/mysql-database/percon

1.1.4 版本演变

MySQL:5.1 --> 5.5 --> 5.6 --> 5.7 -->8.0

MariaDB:5.1 -->5.5 -->10.0--> 10.1 --> 10.2 --> 10.3 --> 10.4 --> 10.5

MySQL的特性

开源免费

插件式存储引擎:也称为"表类型",存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择,Mysql5.5.5开始innoDB引擎是MYSQL默认引擎

MyISAM ==> Aria

InnoDB ==> XtraDB

单进程,多线程

诸多扩展和新特性

提供了较多测试组件

1.2 MySQL 安装方式介绍和快速安装

1.2.1 安装方式介绍

程序包管理器管理的程序包

源代码编译安装

二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用

1.2.2 RPM包安装MySQL

CentOS 安装光盘

项目官方:https://downloads.mariadb.org/mariadb/repositories/

国内镜像:

https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/

https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/

CentOS 8:安装光盘直接提供

mysql-server:8.0

mariadb-server : 10.3

CentOS 7:安装光盘直接提供

mariadb-server:5.5 服务器包

mariadb 客户端工具包

CentOS 6:

mysql-server:5.1 服务器包

mysql 客户端工具包

范例: CentOS 7 利用yum源安装MySQL5.7

#创建mysql的repo文件

[root@centos7 ~]#tee /etc/yum.repos.d/mysql.repo <

[mysql]

name=mysql5.7

baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/

gpgcheck=0

EOF

#安装mysql服务并设置启动并开启自启

[root@Centos7 ~]#yum install -y mysql-community-server

[root@Centos7 ~]#systemctl enable --now mysqld

#查看端口号3306

[root@Centos7 ~]#ss -ntl

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 *:22 *:*

LISTEN 0 100 127.0.0.1:25 *:*

LISTEN 0 80 [::]:3306 [::]:*

LISTEN 0 128 [::]:22 [::]:*

LISTEN 0 100 [::1]:25 [::]:*

#直接使用mysql工具登录提示拒绝

[root@Centos7 ~]#mysql

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) #用户'root'@'localhost'的访问被拒绝(使用密码:NO)

#过滤出mysql日志中的初始密码

[root@Centos7 ~]#grep password /var/log/mysqld.log

2023-08-02T09:12:19.484455Z 1 [Note] A temporary password is generated for root@localhost: hRs=qta-43h,

2023-08-02T09:12:30.626439Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)

#修改初始密码方法1

[root@Centos7 ~]#mysql -uroot -p'hRs=qta-43h,'

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 7

Server version: 5.7.43

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

#使用初始密码登录无法执行操作,需要修改密码后才可以,提示在执行此语句之前,必须使用ALTER USER语句重置密码。

mysql> status

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

#修改简单密码不符合密码策略,提示您的密码不符合当前策略要求

mysql> alter user root@'localhost' identified by 'dxj123';

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

#修改为复杂密码修改成功

mysql> alter user root@'localhost' identified by 'Dxj123!@#';

Query OK, 0 rows affected (0.00 sec)

#执行status查看状态信息

mysql> status

--------------

mysql Ver 14.14 Distrib 5.7.43, for Linux (x86_64) using EditLine wrapper

Connection id: 7

Current database: #当前所在的库

Current user: root@localhost #现在登录的用户 username@host host:指定可以通过哪个主机连接当前MySQL

SSL: Not in use

Current pager: stdout

Using outfile: ''

Using delimiter: ;

Server version: 5.7.43 #版本

Protocol version: 10

Connection: Localhost via UNIX socket #连接方式unix套接字(适用于同一台机器客户端服务端通讯)

Server characterset: latin1 #数据库服务器字符集

Db characterset: latin1 #特定数据库所采用的字符集

Client characterset: utf8 #客户端应用程序连接到数据库时所使用的字符集。这决定了客户端发送给服务端以及从服务端接收到数据时需要进行哪种编码转换。

Conn. characterset: utf8 #连接级别的字符串表示当前与数据库建立连接所采用的客户端请求中包含的实际字符传输编码方式

UNIX socket: /var/lib/mysql/mysql.sock #套接字文件

Uptime: 8 min 48 sec

Threads: 1 Questions: 13 Slow queries: 0 Opens: 107 Flush tables: 1 Open tables: 100 Queries per secnd avg: 0.024

--------------

#修改初始密码方法2

[root@Centos7 ~]#mysqladmin -uroot -p'hRs=qta-43h,' password 'Dxj123!@#'

mysqladmin: [Warning] Using a password on the command line interface can be insecure.

Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

1.2.3 通用二进制安装安装MySQL 5.7 和 MySQL8.0

1.2.3.1 安装相关包

#安装依赖包

yum -y install libaio numactl-libs

1.2.3.2 用户和组

#创建mysql用户组

groupadd mysql

#创建mysql用户 -r:系统用户 -g:指定所属组mysql -s:/bin/false禁止用户登录

useradd -r -g mysql -s /bin/false mysql

1.2.3.3 准备程序文件

#二进制包默认编译时指定的路径为/usr/local/mysql,所以需要解压到该路径并创建软连接

wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz

tar xf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz -C /usr/local

cd /usr/local/

ln -s mysql-5.7.31-linux-glibc2.12-x86_64/ mysql

chown -R root.root /usr/local/mysql

1.2.3.4 准备环境变量

echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh

. /etc/profile.d/mysql.sh

1.2.3.5 准备配置文件

cp /etc/my.cnf{,.bak}

vim /etc/my.cnf

[mysqld]

datadir=/data/mysql #数据库数据存放目录

skip_name_resolve=1 #服务器MySQL将不做dns反向解析,不将ip地址解析成主机名(启用反向解析dns可能解析不了,会影响连接速度)。

socket=/data/mysql/mysql.sock #指定服务端socket文件位置

log-error=/data/mysql/mysql.log ##指定日志文件位置

pid-file=/data/mysql/mysql.pid #指定pid文件位置

[client]

socket=/data/mysql/mysql.sock #指定客户端socket文件位置

1.2.3.6 初始化数据库文件并提取root密码

#/data/mysql 会自动生成,但是/data/必须事先存在

mkdir -pv /data/mysql

1.2.3.6.1 方式1: 生成随机密码

#mysql初始化

mysqld --initialize --user=mysql --datadir=/data/mysql

...省略...

2019-07-04T13:03:54.258140Z 1 [Note] A temporary password is generated forroot@localhost: LufavlMka6,! #注意生成root的初始密码

grep password /data/mysql/mysql.log

2019-12-26T13:31:30.458826Z 1 [Note] A temporary password is generated forroot@localhost: LufavlMka6,!

awk '/temporary password/{print $NF}' /data/mysql/mysql.log

LufavlMka6,!

1.2.3.6.2 方式2: 生成 root 空密码

mysqld --initialize-insecure --user=mysql --datadir=/data/mysql

1.2.3.7 准备服务脚本和启动

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

chkconfig --add mysqld

service mysqld start

1.2.3.8 修改口令

#修改前面生成的随机密码为指定密码

mysqladmin -uroot -p'LufavlMka6,!' password 123456

#修改前面生成的空密码为指定密码

mysqladmin -uroot password 123456

1.2.3.9 测试登录

mysql -uroot -p123456

1.2.4 一键安装MySQL5.7 和 MySQL8.0 二进制包的脚本

1.2.4.1 离线安装脚本

#!/bin/bash

. /etc/init.d/functions

SRC_DIR=`pwd`

#MYSQL='mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz'

MYSQL='mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz'

COLOR='echo -e \E[01;31m'

END='\E[0m'

MYSQL_ROOT_PASSWORD=123456

check (){

if [ $UID -ne 0 ]; then

action "当前用户不是root,安装失败" false

exit 1

fi

cd $SRC_DIR

if [ ! -e $MYSQL ];then

$COLOR"缺少${MYSQL}文件"$END

$COLOR"请将相关软件放在${SRC_DIR}目录下"$END

exit

elif [ -e /usr/local/mysql ];then

action "数据库已存在,安装失败" false

exit

else

return

fi

}

install_mysql(){

$COLOR"开始安装MySQL数据库..."$END

yum -y -q install libaio numactl-libs

cd $SRC_DIR

tar xf $MYSQL -C /usr/local/

MYSQL_DIR=`echo $MYSQL| sed -nr 's/^(.*[0-9]).*/\1/p'`

ln -s /usr/local/$MYSQL_DIR /usr/local/mysql

chown -R root.root /usr/local/mysql/

id mysql &> /dev/null || { useradd -s /sbin/nologin -r mysql ; action "创建mysql用户"; }

echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh

. /etc/profile.d/mysql.sh

ln -s /usr/local/mysql/bin/* /usr/bin/

cat > /etc/my.cnf <<-EOF

[mysqld]

server-id=1

log-bin

datadir=/data/mysql

socket=/data/mysql/mysql.sock

log-error=/data/mysql/mysql.log

pid-file=/data/mysql/mysql.pid

[client]

socket=/data/mysql/mysql.sock

EOF

[ -d /data ] || mkdir /data

mysqld --initialize --user=mysql --datadir=/data/mysql

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

chkconfig --add mysqld

chkconfig mysqld on

service mysqld start

[ $? -ne 0 ] && { $COLOR"数据库启动失败,退出!"$END;exit; }

sleep 3

MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.log`

mysqladmin -uroot -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD &>/dev/null

action "数据库安装完成"

}

check

install_mysql

1.2.4.2 在线安装脚本

[root@centos7 ~]#cat install_online_mysql5.7or8.0_for_centos.sh

#!/bin/bash

. /etc/init.d/functions

SRC_DIR=`pwd`

MYSQL='mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz'

URL=http://mirrors.163.com/mysql/Downloads/MySQL-5.7

#MYSQL='mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz'

#URL=http://mirrors.163.com/mysql/Downloads/MySQL-8.0

COLOR='echo -e \E[01;31m

END='\E[0m'

MYSQL_ROOT_PASSWORD=123456

check (){

if [ $UID -ne 0 ]; then

action "当前用户不是root,安装失败" false

exit 1

fi

cd $SRC_DIR

rpm -q wget || yum -y -q install wget

wget $URL/$MYSQL

if [ ! -e $MYSQL ];then

$COLOR"缺少${MYSQL}文件"$END

$COLOR"请将相关软件放在${SRC_DIR}目录下"$END

exit

elif [ -e /usr/local/mysql ];then

action "数据库已存在,安装失败" false

exit

else

return

fi

}

install_mysql(){

$COLOR"开始安装MySQL数据库..."$END

yum -y -q install libaio numactl-libs

cd $SRC_DIR

tar xf $MYSQL -C /usr/local/

MYSQL_DIR=`echo $MYSQL| sed -nr 's/^(.*[0-9]).*/\1/p'`

ln -s /usr/local/$MYSQL_DIR /usr/local/mysql

chown -R root.root /usr/local/mysql/

id mysql &> /dev/null || { useradd -s /sbin/nologin -r mysql ; action "创建mysql用户"; }

echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh

. /etc/profile.d/mysql.sh

ln -s /usr/local/mysql/bin/* /usr/bin/

cat > /etc/my.cnf <<-EOF

[mysqld]

server-id=`hostname -I|cut -d. -f4`

log-bin

datadir=/data/mysql

socket=/data/mysql/mysql.sock

log-error=/data/mysql/mysql.log

pid-file=/data/mysql/mysql.pid

[client]

socket=/data/mysql/mysql.sock

EOF

[ -d /data ] || mkdir /data

mysqld --initialize --user=mysql --datadir=/data/mysql

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

chkconfig --add mysqld

chkconfig mysqld on

service mysqld start

[ $? -ne 0 ] && { $COLOR"数据库启动失败,退出!"$END;exit; }

sleep 3

MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.log`

mysqladmin -uroot -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD &>/dev/null

action "数据库安装完成"

}

check

install_mysql

1.2.5 源码编译安装 MySQL

建议:内存6G以上,否则可能会编译出错,CPU 核数越多越好

说明:本操作过程适用于以下版本

mysql-5.6.51.tar.gz

mariadb-10.2.18.tar.gz

CentOS 7

1.2.5.1 安装相关依赖包

yum -y install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel perl-Data-Dump

1.2.5.2 做准备用户和数据目录

useradd -r -s /sbin/nologin -d /data/mysql mysql

1.2.5.3 准备数据库目录

mkdir -p /data/mysql

chown mysql.mysql /data/mysql

1.2.5.4 源码编译安装

编译安装说明

利用cmake编译,而利用传统方法,cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译

1.2.5.4.1 下载并解压缩源码包

tar xvf mysql-5.6.51.tar.gz -C /usr/local/src

#mariadb-10.2.18.tar.gz

1.2.5.4.2 源码编译安装 MySQL

#mysql-5.6.51编译安装

cd mysql-5.6.51/

cmake . \

-DCMAKE_INSTALL_PREFIX=/apps/mysql \

-DMYSQL_DATADIR=/data/mysql/ \

-DSYSCONFDIR=/etc/ \

-DMYSQL_USER=mysql \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITH_PARTITION_STORAGE_ENGINE=1 \

-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \

-DWITH_DEBUG=0 \

-DWITH_READLINE=1 \

-DWITH_SSL=system \

-DWITH_ZLIB=system \

-DWITH_LIBWRAP=0 \

-DENABLED_LOCAL_INFILE=1 \

-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci

make -j 8 && make install

提示:如果出错,执行rm -f CMakeCache.txt

范例:mysql8.0.34编译安装

#安装依赖包

yum -y install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel perl-Data-Dump gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc libtirpc-devel rpcgen

#下载boost库文件

wget https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.bz2

tar xf boost_1_77_0.tar.bz2 -C /usr/local/src/mysql-8.0.34

cd /usr/local/src/mysql-8.0.34/

mkdir bld

cd bld

#运行cmake ..命令时,它会告诉CMake在当前目录的上一级目录中找到名为CMakeLists.txt的文件,并根据该文件进行配置并生成构建文件。这通常被称为“out- of-source”或“out-of-tree”构建方式,意味着构建过程将发生在与源代码分离的目录中。

cmake .. \

-DCMAKE_INSTALL_PREFIX=/apps/mysql \

-DMYSQL_DATADIR=/data/mysql/ \

-DSYSCONFDIR=/etc/ \

-DMYSQL_USER=mysql \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITH_PARTITION_STORAGE_ENGINE=1 \

-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \

-DWITH_DEBUG=0 -DWITH_READLINE=1 \

-DWITH_SSL=system \

-DWITH_ZLIB=bundled \

-DWITH_LIBWRAP=0 \

-DENABLED_LOCAL_INFILE=1 \

-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DWITH_BOOST=/usr/local/src/mysql-8.0.34/boost_1_77_0/

make -j 8 && make install

1.2.5.5 准备环境变量

echo 'PATH=/apps/mysql/bin:$PATH' > /etc/profile.d/mysql.sh

. /etc/profile.d/mysql.sh

1.2.5.6 生成数据库文件

cd /apps/mysql/

scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql

#8.0版本初始化

bin/mysqld --initialize --user=mysql --datadir=/data/mysql/

1.2.5.7 准备配置文件

cp -b /apps/mysql/support-files/my-default.cnf /etc/my.cnf

#针对旧版本或mariadb-10.2.18.tar.gz

cp /apps/mysql/support-files/my-huge.cnf /etc/my.cnf

1.2.5.8 准备启动脚本,并启动服务+

cp /apps/mysql/support-files/mysql.server /etc/init.d/mysqld

chkconfig --add mysqld

service mysqld start

1.2.5.9安全初始化

mysql_secure_installation

1.2.6 基于 docker 容器创建 MySQL

[root@ubuntu1804 ~]#docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.30

[root@ubuntu1804 ~]#mysql -uroot -p123456 -h127.0.0.1

1.3 MySQL 组成和常用工具

1.3.1 客户端程序

mysql: 基于mysql协议交互式或非交互式的CLI工具

mysqldump:备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成insert等写操作语句保存文本文件中

mysqladmin:基于mysql协议管理mysqld

mysqlimport:数据导入工具

MyISAM存储引擎的管理工具:

myisamchk:检查MyISAM库

myisampack:打包MyISAM表,只读

1.3.2 服务器端程序

mysqld_safe

mysqld

mysqld_multi 多实例 ,示例:mysqld_multi --example

1.3.3 用户账号

mysql用户账号由两部分组成:

'USERNAME'@'HOST'

wordpress@'10.0.0.100'

wordpress@'10.0.0.%'

wordpress@'%

说明:

HOST限制此用户可通过哪些远程主机连接mysql服务器

支持使用通配符:

% 匹配任意长度的任意字符,相当于shell中*, 示例: 172.16.0.0/255.255.0.0 或 172.16.%.%

_ 匹配任意单个字符,相当于shell中?

1.3.4 mysql 客户端命令

1.3.4.1 mysql 运行命令类型

客户端命令:本地执行,每个命令都完整形式和简写格式

范例: 查看版本

[root@centos8 ~]#mysql -V

mysql Ver 8.0.21 for Linux on x86_64 (Source distribution)

范例:

mysql> \h, help #查看帮助

mysql> \u,use #使用数据库(进到指定数据库)

mysql> \s,status #从服务器获取状态信息

mysql> \!,system #执行shell命令

服务端命令:通过mysql协议发往服务器执行并取回结果,命令末尾都必须使用命令结束符号,默认为分号

#示例:

mysql>SELECT VERSION();

1.3.4.2 mysql 使用模式

交互模式

脚本模式:

mysql -uUSERNAME -pPASSWORD < /path/somefile.sql

cat /path/somefile.sql | mysql -uUSERNAME -pPASSWORD

mysql>source /path/from/somefile.sql #source引用sql文件

1.3.4.3 mysql命令使用格式

mysql [OPTIONS] [database]

通过mysql --help获取帮助

mysql客户端常用选项:

-A, --no-auto-rehash 禁止补全

-u, --user= 用户名,默认为root

-h, --host= 服务器主机,默认为localhost

-p, --passowrd= 用户密码,建议使用-p,默认为空密码

-P, --port= 服务器端口

-S, --socket= 指定连接socket文件路径

-D, --database= 指定默认数据库

-C, --compress 启用压缩

-e "SQL" 执行SQL命令

-V, --version 显示版本

-v --verbose 显示详细信息

--print-defaults 获取程序默认使用的配置

登录系统:

#默认空密码登录

mysql -uroot -p

范例: 运行mysql命令

mysql>use mysql #切换数据库

mysql> select database(); #查看当前数据库

mysql>select user(); #查看当前用户

mysql>SELECT User,Host,Password FROM user;

mysql>system clear #清屏

mysql> ^DBye #ctrl+d 退出

范例:客户端 mysql 的配置文件,修改提示符

#查看mysql版本

[root@centos8 ~]#mysql -V

mysql Ver 15.1 Distrib 10.3.11-MariaDB, for Linux (x86_64) using readline 5.1

#可通过man mysql命令通过prompt查看选项说明

#临时修改mysql提示符,\\r:\\m:\\s 小时分钟秒 (\\u@\\h)用户@主机 [\\d]数据库名

[root@centos8 ~]#mysql -uroot -p123456 --prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"

#临时修改mysql提示符

[root@centos8 ~]#export MYSQL_PS1="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"

#持久修改mysql提示符

[root@centos8 ~]#vim /etc/my.cnf.d/mysql-clients.cnf

[mysql]

prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_" #12小进制

prompt="\\R:\\m:\\s(\\u@\\h) [\\d]>\\_" #24小进制

#查看MySQL服务器当前实际使用的各种配置参数

[root@centos8 ~]#mysql --print-defaults -v

mysql would have been started with the following arguments:

--prompt=\r:\m:\s(\u@\h) [\d]>\_ -v

#查看提示符

[root@centos8 ~]#mysql

Welcome to the MariaDB monitor. Commands end with ; or \g.

Your MariaDB connection id is 11

Server version: 10.3.11-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

10:29:30(root@localhost) [(none)]> use mysql

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

10:29:34(root@localhost) [mysql]> exit

范例:配置所有MySQL 客户端的自动登录

vim /etc/my.cnf.d/client.cnf

[client]

user=root

password=123456

[mysql]

prompt=(\\u@\\h) [\\d]>\\_

1.3.4.4 mysqladmin命令

mysqladmin 命令格式

mysqladmin [OPTIONS] command command..

通过mysqladmin --help获取帮助

范例:

#查看mysql服务是否正常,如果正常提示mysqld is alive

mysqladmin -uroot -pcentos ping

#关闭mysql服务,但mysqladmin命令无法开启

mysqladmin -uroot -p123456 shutdown

#创建数据库testdb

mysqladmin -uroot -p123456 create testdb

#删除数据库testdb

mysqladmin -uroot -p123456 drop testdb

#修改root密码

mysqladmin -uroot -p123456 password 'centos'

#日志滚动,生成新文件/var/lib/mysql/mariadb-bin.00000N

mysqladmin -uroot -p123456 flush-log

1.3.5 服务器端配置

1.3.5.1 服务器端配置文件

服务器端(mysqld):工作特性有多种配置方式

1、命令行选项:

2、配置文件:类ini格式,集中式的配置,能够为mysql的各应用程序提供配置信息

服务器端配置文件:

/etc/my.cnf #Global选项

/etc/mysql/my.cnf #Global选项

~/.my.cnf #User-specific选项,针对特定用户的

配置文件格式:

[mysqld] #用于设置MySQL服务器(即监控进程)的参数。在该节中,可以定义与服务器相关的选项,如端口号、数据目录等

[mysqld_safe] #该配置包含了mysqld_safe工具的参数。mysqld_safe是一个启动和停止MySQL服务时使用的脚本工具,它负责处理错误检测和自动重启等任务。

[mysqld_multi] #该配置节用于多实例管理器mysqld_multi的参数设置。通过mysqld_multi可以同时管理多个独立运行的MySQL实例。

[mysql] #针对mysql客户端(mysql指定)此部分用于客户端程序(例如命令行工具)连接到MySQL服务器时使用的默认选项。您可以在此处定义一些客户端相关的设置,例如默认字符集、用户名等。

[mysqladmin] #这是关于mysqladmin命令行工具使用时所需选项和设置信息的部分。mysqladmin用于执行各种管理任务,如用户创建、备份数据库等。

[mysqldump] #该部分指定 mysqdump 命令行工具的默认选项和配置信息。mysqldump 用于备份 MySQL 数据库。

[server] #此部分包含了关于服务器方面的一些通用设置,如字符集、错误日志路径等。

[client] #针对所有MySQL客户端,本节定义了客户端程序(例如命令行工具)的一些默认选项,如连接超时时间、输出格式等。

格式:

parameter = value

说明:

_和- 相同

1,ON,TRUE意义相同, 0,OFF,FALSE意义相同,无区分大小写

1.3.5.2 socket 连接说明

官方说明

https://dev.mysql.com/doc/mysql-port-reference/en/mysql-ports-reference-tables.html#mysql-client-server-ports

服务器监听的两种 socket 地址:

ip socket: 监听在tcp的3306端口,支持远程通信 ,侦听3306/tcp端口可以在绑定有一个或全部接口IP上

unix sock: 监听在sock文件上,仅支持本机通信, 如:/var/lib/mysql/mysql.sock)

说明:host为localhost 时自动使用unix sock

范例: 查看MySQL的端口

mysql> SHOW VARIABLES LIKE 'port';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| port | 3306 |

+---------------+-------+

1 row in set (0.01 sec)

#MySQL8.0增加了一个33060/tcp端口

#Port 33060 is the default port for the MySQL Database Extended Interface (the MySQL X Protocol).

mysql> SHOW VARIABLES LIKE 'mysqlx_port';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| mysqlx_port | 33060 |

+---------------+-------+

1 row in set (0.00 sec)

1.3.5.3 关闭mysqld网络连接

只侦听本地客户端, 所有客户端和服务器的交互都通过一个socket文件实现,socket的配置存放在/var/lib/mysql/mysql.sock) 可在/etc/my.cnf修改

范例:

vim /etc/my.cnf

[mysqld]

skip-networking=1 #禁用网络连接.只能通过本地主机(即localhost)访问MySQL服务,而无法从其他计算机或网络中进行远程连接。该选项适用于那些不需要远程访问数据库的情况下,可以提高安全性并减少潜在的风险。

bind_address=127.0.0.1 #指定mysql服务器绑定监听的IP地址。默认情况下,它设置为0.0.0.0,表示服务器将监听所有可用的网络接口,并且允许来自任何IP地址的连接。如果将其设置为127.0.0.1或特定指定IP地址,则表示仅允许通过本地回环接口进行连接,否则只能在本地主机上进行访问。这样可以增加安全性并限制对数据库的直接外部访问。

1.4 MySQL多实例

1.4.1 多实例介绍和方案

1.4.1.1 多实例介绍

什么是数据库多实例

多实例类似微信双开,端口号类比微信账号,数据库类比聊天窗口,表类比聊天记录

MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306、3307等),同时运行多个MySQL服务进程,这些服务进程通过不同的Socket监听不同的服务端口来提供服务。

多实例可能是MySQL的不同版本,也可能是MySQL的同一版本实现

多实例的好处

可有效利用服务器资源。当单个服务器资源有剩余时,可以充分利用剩余资源提供更多的服务,且可以实现资源的逻辑隔离节约服务器资源。例如公司服务器资源紧张,但是数据库又需要各自尽量独立的提供服务,并且还需要用到主从复制等技术,多实例就是最佳选择

多实例弊端

存在资源互相抢占的问题。比如:当某个数据库实例并发很高或者SQL查询慢时,整个实例会消耗大量的CPU、磁盘I/O等资源,导致服务器上面其他的数据库实例在提供服务的质量也会下降,所以具体的需求要根据自己的实际情况而定。

1.4.1.2 MySQL多实例常见的配置方案

单一的配置文件、单一启动程序多实例部署方式

MySQL官方文档提到的单一配置文件、单一启动程序多实例部署方式

耦合度太高,一个配置文件不好管理。不是很推荐。

多配置文件、多启动程序部署方式

多配置文件、多启动程序部署方式是针对每个实例都有独立的配置文件和目录,管理灵活,此方案耦合度较低

工作开发和运维的统一原则:降低耦合度。所以建议的此方式

1.4.2 实战案例 :Rocky 8 实现mariadb的yum安装的多实例

1.4.2.1 实战目的

Rocky 8 yum安装mariadb-10.3.17并实现三个实例

1.4.2.2 环境要求

一台系统Rocky 8.X主机

1.4.2.3 前提准备

关闭SElinux

关闭防火墙

时间同步

1.4.2.4 实现步骤

1.4.2.4.1 安装mariadb

[root@centos8 ~]#yum -y install mariadb-server

1.4.2.4.2 准备三个实例的目录

[root@centos8 ~]#mkdir -pv /mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid}

[root@centos8 ~]#chown -R mysql.mysql /mysql

[root@centos8 ~]#tree -d /mysql/ #-d只列出目录

/mysql/

├── 3306

│ ├── bin

│ ├── data

│ ├── etc

│ ├── log

│ ├── pid

│ └── socket

├── 3307

│ ├── bin

│ ├── data

│ ├── etc

│ ├── log

│ ├── pid

│ └── socket

└── 3308

├── bin

├── data

├── etc

├── log

├── pid

└── socket

21 directorie

1.4.2.4.3 生成数据库文件

#初始化

[root@centos8 ~]#mysql_install_db --user=mysql --datadir=/mysql/3306/data

[root@centos8 ~]#mysql_install_db --user=mysql --datadir=/mysql/3307/data

[root@centos8 ~]#mysql_install_db --user=mysql --datadir=/mysql/3308/data

#可通过循环执行上述命令

[root@centos8 ~]for port in {3306..3308};do mysql_install_db --user=mysql --datadir=/mysql/$port/data ;done

1.4.2.4.4 准备配置文件

[root@centos8 ~]#vim /mysql/3306/etc/my.cnf

[mysqld]

port=3306

datadir=/mysql/3306/data

socket=/mysql/3306/socket/mysql.sock

log-error=/mysql/3306/log/mysql.log

pid-file=/mysql/3306/pid/mysql.pid

#重复上面步骤设置3307,3308

[root@centos8 ~]#sed 's/3306/3307/' /mysql/3306/etc/my.cnf > /mysql/3307/etc/my.cnf

[root@centos8 ~]#sed 's/3306/3308/' /mysql/3306/etc/my.cnf > /mysql/3308/etc/my.cnf

1.4.2.4.5 准备启动脚本

[root@centos8 ~]#vim /mysql/3306/bin/mysqld

#!/bin/bash

port=3306 #该实例所用端口

mysql_user="root" #mysql连接时所用用户名

mysql_pwd="123456" #mysql连接时所用密码

cmd_path="/usr/bin" #存放可执行文件所在路径(例如mysqld_safe和mysqladmin)

mysql_basedir="/mysql" #MySQL安装目录根路径

mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock" #MySQL数据库socket文件所在位置

#定义mysql启动函数,mysqld_safe启动数据库服务,--defaults-file使用指定的配置文件加载相应的设置

function_start_mysql()

{

if [ ! -e "$mysql_sock" ];then

printf "Starting MySQL...\n"

${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null &

else

printf "MySQL is running...\n"

exit

fi

}

#定义mysql关闭函数

function_stop_mysql()

{

if [ ! -e "$mysql_sock" ];then

printf "MySQL is stopped...\n"

exit

else

printf "Stoping MySQL...\n"

${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown

fi

}

#定义mysql重启函数

function_restart_mysql()

{

printf "Restarting MySQL...\n"

function_stop_mysql

sleep 2

function_start_mysql

}

# 使用case语句来根据输入参数$1执行不同的操作

case $1 in

start)

function_start_mysql

;;

stop)

function_stop_mysql

;;

restart)

function_restart_mysql

;;

*)

printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"

esac

#重复上述过程,分别建立3307,3308的启动脚本

#启动脚本添加执行权限

[root@centos8 ~]#chmod +x /mysql/3306/bin/mysqld

[root@centos8 ~]#chmod +x /mysql/3307/bin/mysqld

[root@centos8 ~]#chmod +x /mysql/3308/bin/mysqld

#可通过循环替代上述命令

[root@centos8 ~]#for port in {3306..3308};do chmod +x /mysql/$port/bin/mysqld ;done

1.4.2.4.6 启动服务

[root@centos8 ~]#/mysql/3306/bin/mysqld start

[root@centos8 ~]#/mysql/3307/bin/mysqld start

[root@centos8 ~]#/mysql/3308/bin/mysqld start

[root@centos8 ~]#ss -ntl

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 0.0.0.0:22 0.0.0.0:*

LISTEN 0 128 [::]:22 [::]:*

LISTEN 0 80 *:3306 *:*

LISTEN 0 80 *:3307 *:*

LISTEN 0 80 *:3308 *:*

1.4.2.4.7 登录实例

[root@centos8 ~]#/mysql/3308/bin/mysqld start

#两种连接方法

[root@centos8 ~]#mysql -h127.0.0.1 -P3308

[root@centos8 ~]#mysql -uroot -S /mysql/3308/socket/mysql.sock

#确认连接的端口

MariaDB [(none)]> show variables like 'port';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| port | 3308 |

+---------------+-------+

1 row in set (0.001 sec)

MariaDB [(none)]>

#关闭数据库,需要手动输入root的密码

[root@centos8 ~]#/mysql/3308/bin/mysqld stop

Stoping MySQL...

Enter password:

[root@centos8 ~]#/mysql/3308/bin/mysqld start

Starting MySQL...

1.4.2.4.8 修改root密码

#加上root的口令

[root@centos8 ~]#mysqladmin -uroot -S /mysql/3306/socket/mysql.sock password '123456'

[root@centos8 ~]#mysqladmin -uroot -S /mysql/3307/socket/mysql.sock password '123456'

[root@centos8 ~]#mysqladmin -uroot -S /mysql/3308/socket/mysql.sock password '123456'

#或者登录mysql,执行下面也可以

Mariadb>update mysql.user set password=password("123456") where user='root';

Mariadb>flush privileges;

#重复步骤,分别修改别外两个实例3307,3308对应root口令

1.4.2.4.9 测试连接

[root@centos8 ~]#mysql -uroot -p -S /mysql/3306/socket/mysql.sock #提示输入口令才能登录

1.4.2.4.10 开机启动

[root@centos8 ~]#vi /etc/rc.d/rc.local

#在最后一行加下面内容

for i in {3306..3308};do /mysql/$i/bin/mysqld start;done

[root@centos8 ~]#chmod +x /etc/rc.d/rc.local

相关文章

365bet在线登录

中国近代化问题研究述评

平板安卓office365破解版

零基础大数据培训需要多久?

约彩365ios下载

世界杯历史上十大帅哥(揭秘世界杯历史上最迷人的球员)