3.1 工作模型(C/S)
MySQL 客户端/服务器
类比ssh连接工作原理:
一,本地socket连接方式: (已经封装了IP+端口:用于本地服务的连接)
前提:
需要提前创建xxx@‘localhost‘ 本地用户
[root@db01 ~]# cat /etc/my.cnf | grep socket #socket=/tmp/mysql.sock
[root@db01 ~]# mysql -S /tmp/mysql.sock #socket登录方式
ps: 本地登录:只能在本地使用,不依赖于IP和端口
二, 远程TCPIP链接方式
前提:
需要提前创建remote@‘10.0.0.%‘ 远程用户
[root@db01 ~]# mysql -uroot -p123456 -h 10.0.0.51 -p 3306
3.2 服务器端: 实例
mysql实例:指mysqld + 工作线程(main thread+多个线程) + 预分配的内存结构
--->>>
公司:boss+经理+员工+办公室
三:实例图解:
/xxx/xxx/mysql/bin/mysqld------->>启动----->>实例启动
??3.3 msqld程序执行过程
面试:经常被问道的体系结构原理,mysql语句执行流程:
连接层 (1)提供连接协议:TCP/IP 、SOCKET (2)提供验证:用户、密码,IP,SOCKET (3)提供专用连接线程:接收用户SQL,返回结果 通过以下语句可以查看到连接线程基本情况 mysql> show processlist; SQL层 (1)验证SQL语法和SQL_MODE (2)验证语义 (3)验证权限 (4)解析器进行语句解析,生成执行计划(解析树) (5)优化器(各种算法,基于执行代价),根据算法,找到代价最低的执行计划。 代价:CPU IO MEM (6)执行器按照优化器选择执行计划,执行SQL语句,得出获取数据的方法。 (7)提供query cache(默认不开),一般不开,会用redis (8)记录操作日志(binlog),默认没开 存储引擎层 真正和磁盘打交道的一个层次 根据SQL层提供的取数据的方法,拿到数据,返回给SQL,结构化成表,再又连接层线程返回给用户。 ### 3.4 逻辑结构 1.mysql 物理存储结构认识 宏观: 库----> 对应着系统中: 目录 #8.0之前版本在mysql数据目录下mkdir 一个目录 ---> 表中可以查看到 8.0后规范了,不允许展示非数据库创建的目录。 表----> 对应系统中: xxx.idb 微观: 彩蛋: 1. 磁盘建目录,5.6和5.7可以直接识别为一个库. 2. 8.0 之前,mysql下很多表是MyiSAM引擎. user.frm --->表结构 user.MYD --->数据行 user.MYI --->索引 3. 8.0之前 InnoDB表 t1.frm --> 表结构 t1.ibd --> 数据行+索引
Ps: 语义检查:语义类型有ddl,dcl,dml,dtl不同类型
3.4 MySQL的逻辑结构(操作对象)
逻辑-->抽象
MySQL Linux 库: 库名 +属性 目录: 文件名 + 属性 表: 文件名 + 表属性 + 表内容 + 列 文件: 文件名 + 文件属性 + 文件内容mysql简单命令对比Linux系统:
? mysql> show databases; ls /
? mysql> use mysql; cd
? mysql> show tables; ls ./
? mysql> desc user; 看列定义
*3.5 MySQL的物理存储结构
段:一个表就是一个段,可以由1个或多个区构成
区:一个区(蔟),默认1M连续的64个page组成
页:一个页,默认16K,连续的4个OS block组成,最小的IO单元
3.6 MySQL基础管理
3.5.1 用户的作用 Linux用户作用: MySQL用户作用 : 登录Linux 登录MySQL数据库 管理Linux对象:文件 管理MySQL对象:表 3.2.12 用户定义? Linux用户:
? MySQl用户: 用户名@‘白名单‘
白名单包括: 地址列表,允许白名单登录的IP登录MySQL,管理MySQL
例: oldhou@‘localhost‘ :oldhou用户能够通过本地登录MySQL(socket)
oldhou@‘10.0.0.10 或 .%‘ :oldhou用户能够通过10.0.0.10或10.0.0.0/24 网段远程登录
oldhou@‘10.0.0.5%‘ : 10.0.0.50-59
oldhou@‘10.0.0.0/255.255.254.0‘ # 网段只支持完整的子网掩码写法
oldhou@‘%‘ # %: 排除本地的所有网段可以登录。
oldhou@‘web01‘
oldhou@‘web01.oldguo.com‘
3.2.3 用户的管理查看用户:
记不住?---> mysql> select * from mysql.usr; ----> 选择你要的参数 (不能用户查业务表--> cat 大文件一样危险 )
mysql> desc mysql.user;
MySQL用户操作 SQL语句 查: mysql> select user,host from mysql.user; mysql> select user,host ,authentication_string from mysql.user ; 增: mysql> create user oldguo@‘localhost‘; mysql> create user oldboy@‘10.0.0.%‘ identified by ‘123‘; 改: mysql> alter user oldguo@‘localhost‘ identified by ‘123‘; #用于添加和修改密码 删 (尽量精简用户) mysql> drop user oldguo@‘localhost‘ ; mysql> drop user oldboy@‘10.0.0.%‘; #会删除用户的权限。注意: 8.0版本以前是可以通过grant命令,建立用户 + 授权 (8.0, 必须先建立用户,后授权)
mysql升级8.0 后连接不上数据库?
----> 是因为升级了sha2加密插件---> 调整为mysql_native_password 加密插件可解决,
好习惯:命令行尽量使用mysql -uroot -p 隐藏登录
Linux 权限----> 对象:文件
mysql权限----> 对象:
3.7 权限管理
3.7.1 权限作用linux中权限表现方式: RWX
MySQL的权限变更方式:增删改查,具体的 命令
mysql> show privileges; #查询权限
mysql> show privileges;3.7.2 授权操作
语法: grant 权限 on 对象 to 用户 identified by ‘ 密码 ‘; 8.0+ : create user 用于 identified by ‘ 密码 ‘ ; grant 权限1,权限2,权限3,... on 对象 to 用户 identified by ‘ 密码 ‘; 权限: ALL :管理员 grant option : 给别的用户授权 对象范围: 库 , 表 linux权限存放于 inode中 mysql 中权限存放与 授权表中 -user * 存放全局范围内的权限 -db * 存放单库级别 -columns_priv : 单列 -tables_priv : 存放单表级别 -procs_ priv -proxies_ priv *.* : ------------> chmod -R 755 / 管理员 oldhou.* : ------------> chmod -R 755 /oldhou 普通用户 oldguo.t1 : ------------> chmod -R 755 /oldhou/t1 单表
ALL 所有权限
(不包括 Crant option. ---> 拥有此权限可以给其他用户授权 )
应用用户一般具备以下权限即可
select , update , delete ,insert
3.7.3 授权案例案例1:创建一个管理员用户oldguo, 能够通过10.0.0.% 网段登录,并管理数据库:
#创建用户并授权 mysql> grant all on *.* to oldguo@‘10.0.0.%‘ identified by ‘123‘ with grant option; Query OK, 0 rows affected, 1 warning (0.00 sec) ###查询: mysql> show grants for oldguo@‘10.0.0.%‘ ; +----------------------------------------------------------------------+ | Grants for oldguo@10.0.0.% | +----------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO ‘oldguo‘@‘10.0.0.%‘ WITH GRANT OPTION | +----------------------------------------------------------------------+ 1 row in set (0.00 sec) ###查看用户权限: mysql> select * from mysql.user\G (\G : 列显示) ... *************************** 4. row *************************** Host: 10.0.0.% User: oldguo ...
*案例2: 创建并授权一个aap@‘10.0.0.%‘业务用户,能对app库下所有的对象进行create,select,update,delete,insert操作
#创建用户并授权 mysql> grant create,update,select,insert on app.* to app@‘10.0.0.%‘ identified by ‘123‘; Query OK, 0 rows affected, 1 warning (0.00 sec) #查看用户权限 mysql> show grants for app@‘10.0.0.%‘; +---------------------------------------------------------------------+ | Grants for app@10.0.0.% | +---------------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘app‘@‘10.0.0.%‘ | | GRANT SELECT, INSERT, UPDATE, CREATE ON `app`.* TO ‘app‘@‘10.0.0.%‘ | +---------------------------------------------------------------------+ 2 rows in set (0.00 sec) mysql> select user,host from mysql.user ; +---------------+-----------+ | user | host | +---------------+-----------+ | app | 10.0.0.% | | oldguo | 10.0.0.% | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+-----------+ 5 rows in set (0.01 sec) #其他方式查看权限---查看基于库级别的权限 Ps: 通过修授权表的内容,也可以达到修改权限的目录,但是不建议 mysql> select * from db\G *************************** 3. row *************************** Host: 10.0.0.% Db: app User: app Select_priv: Y ....练习: 8.0 配置一个remote用户 ---> 开发工具连接:
create user remote@‘10.0.0.%‘ identified with mysql_native_password by ‘123‘;
Grant ALL on . to remote@‘10.0.0.%‘;
3.7.4 回收权限Linux中:chmod -R 644 /oldhou ----> chmod -R 755 /oldhou
Msql中:不能通过重复授权的方式,修改权限(测试无效)只能通过收回权限的方式进行权限的授权
#mysql> show grants for app@‘10.0.0.%‘ ; +---------------------------------------------------------------------+ | Grants for app@10.0.0.% | +---------------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘app‘@‘10.0.0.%‘ | | GRANT SELECT, INSERT, UPDATE, CREATE ON `app`.* TO ‘app‘@‘10.0.0.%‘ | +---------------------------------------------------------------------+ 2 rows in set (0.00 sec) #收回权限 mysql> revoke create on app.* from app@‘10.0.0.%‘; Query OK, 0 rows affected (0.00 sec) mysql> show grants for app@‘10.0.0.%‘; +-------------------------------------------------------------+ | Grants for app@10.0.0.% | +-------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘app‘@‘10.0.0.%‘ | | GRANT SELECT, INSERT, UPDATE ON `app`.* TO ‘app‘@‘10.0.0.%‘ | +-------------------------------------------------------------+ 2 rows in set (0.00 sec)
oracle 删除了用户,会删除库和表
mysql 中删除用户,不会影响库和表,但是会影响业务,删除类的操作都要谨慎
3.7.5 找回密码思路:进入mysql维护模式,修改密码
? --skip-grant-tables :跳过授权表
? --skip-network : 跳过TCP/IP连接
? #启动mysql_safe
? [root@db01 ~]# mysqld_safe --skip-grant-tables &
? [1] 2496
? [root@db01 ~]# Logging to ‘/data/mysql/data/db01.err‘.
? 2020-09-24T09:27:44.696751Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/data
#(1)关闭数据库: [root@db01 ~]# systemctl stop mysqld #(2)使用安全模式启动: [root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking & #只允许本地无密码登录 [1] 4004 [root@db01 ~]# 2020-09-24T09:45:25.485161Z mysqld_safe Logging to ‘/data/mysql/data/db01.err‘. 2020-09-24T09:45:25.521325Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/data #或者 service mysqld start -skip-grant-tables --skip-networking #(3)修改密码: mysql> flush privileges; #手工加载授权表 Query OK, 0 rows affected (0.00 sec) mysql> alter user root@‘localhost‘ identified by ‘123456‘ ; #修改密码 Query OK, 0 rows affected (0.00 sec) #(4)重启数据库到正常模式 [root@db01 ~]# systemctl restart mysqld.service
3.8 连接管理
三种连接方式:
3.8.1 MySQL自带客户端
(1) mysql参数列表:
? -u 用户名
? -p 密码
? -s 本地socket文件位置
? -h 数据库IP地址
? -p 数据库端口号,默认3306
? -e 免交互进行数据库命令(写脚本时用)
? mysql -uroot -p123 -e "select @@innodb_flush_log_at_trx_commit;"
< 导入数据库
? mysql -uroot -p123 </root/world.sql
socket :
? 前提:数据库中必须实现授权oldguo@‘localhost‘ 用户
socket 常见登录方式:
mysql -uoldguo -p123 -S /tmp/mysql.sock (默认位置)
mysql -uoldguo -p -S /tmp/mysql.sock #推荐方式
mysql -p123 -S /tmp/mysql.sock
mysql
mysql -uroot -p123
mysqldump
mysqladmin
TCP/IP:
前提: 必须前提创建好,可以远程连接的用户(ex: oldhou@‘10.0.0.%‘)
mysql -uoldhou -p123 -h 10.0.0.51 -p 3306
mysql -uoldhou -p123 -h 10.0.0.51
mysql -uoldhou -p -h 10.0.0.51 -p 3306
**
**
练习 :授权一个oldboy管理用户,可以通过本地socket登录
mysql> grant all on . to oldboy@‘localhost‘ identified by ‘123‘
[root@db01 ~]# mysql -uoldboy -p123 -S /tmp/mysql.sock
如何查看链接是本地还是远程
有连接层会对每个连接有一个连接线程--->使用命令: show processlist; 查看
Ps: 查看连接用户:
mysql> show processlist; +----+-----------------+------------+------+---------+------+------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-----------------+------------+------+---------+------+------------------------+------------------+ | 5 | event_scheduler | localhost | NULL | Daemon | 8206 | Waiting on empty queue | NULL | | 8 | root | localhost | NULL | Sleep | 101 | | NULL | | 9 | oldguo | localhost | NULL | Query | 0 | starting | show processlist | | 10 | remote | db01:43552 | NULL | Sleep | 68 | | NULL | +----+-----------------+------------+------+---------+------+------------------------+------------------+ 4 rows in set (0.00 sec)3.8.2 MySQL远程客户端
开发工具
前提:必须提前创建好,可以远程连接的用户,(例如:oldguo@"10.0.0.%")
mysqldump 备份工具
mysqladmin 管理工具
3.8.3 程序连接yum install -y php-mysql
pip3 install pymysql
3.9 初始化配置
###方式 源码安装------>> 编译过程中设置初始化参数 配置文件------>>数据库启动之前,设定配置文件参数 /etc/my.cnf 启动脚本命令 ----->>mysql_safe --skip-grant-tables --skip-networking & 配置文件应用 ---------- a. 5.6,5.7初始化区别 5.6 : scripts/mysql_install_db ---5.7以前使用 5.7 : mysqld --initialize-insecure ---5.7以后使用mysqld --initialize-insecure和--initialize ---初始化参数说明 --initialize: 给root@‘localhost‘一个临时密码.四种复杂度12位密码.只能用户登录,需改密码,不能执行sql语句
配置文件个书写格式:
(1)配置文件读取顺序: mysqld --help --verbose | grep my.cnf -默认读取位置: /etc/my.cnf ---->> /etc/mysql/my.cnf ---->> ~/usr/local/mysql/etc/my.cnf ---->> ~/.my.cnf -手工定制配置文件位置点: /opt/my.cnf /data/3306/my.cnf /data/3307/my.cnf /data/3307/my.cnf 启动时: mysql --defaults-file=/opt/my.cnf & mysql_safe --defaults-file=/opt/my.cnf & [标签] 标签是什么? #分类不同程序的参数 --------------------------------------- [服务器端] : 负责数据库服务端运行参数设定: [mysqld] * [mysqld_safe] * [server] #涵盖管理所有服务端标签 [客户端]: 影响客户端连接,不影响远程客户端 [mysql] [mysqldump] [client] #涵盖管理所有客户端标签
基础配置文件模板介绍说明:
[root@db01 ~]# cat /etc/my.cnf [mysqld] ## 服务端标签 user=mysql # 负责数据库管理用户 basedir=/application/mysql # 软件的安装位置 datadir=/data/mysql/data # 数据的存放为位置 socket=/tmp/mysql.sock # 套接字文件 server_id=6 # 标识节点的唯一编号(主从复制有用) port=3306 # 端口号 [mysql] ## 客户端标签 socket=/tmp/mysql.sock # 读取socket文件的位置点(如何创建本地多实例,就不要写,要不然默认读取配置文件的路径)
ps: 生产中,初始化数据库,需要加载配置文件。 (默认文件位置 /etc/my.cnf)
配置文件不在默认路径时:
mysqld --initialize-insecure --defaults-file=/opt/my.cnf
*3.10 启动和关闭
日常启动使用: service mysqld start | stop | restart systemctl start | stop | restart 关闭方式 1. mysql> shutdown; #进入数据库 2. mysqladmin -uroot -p123456 shutdown 3. mysql -uroot -p123456 -e "shutdown" 4. service mysqld stop 5. /etc/init.d/mysqld stop 6. systemctl stop mysql
3.11 多实例(测试,学习)
测试环境-大型架构常会用到多实例
3.11.1 同版本的多实例
###规划: 软件1份 数据目录 3份 /data/330{7..9} 配置文件 3份 /data/330{7..9}/my.cnf 日志目录 3份 /binlog/330{7..9} socket 3份 /tmp/mysql330{7..9}.socket 端口 3份 port=3307,3308,3309 server_id 3份 7,8,9
2.3 同版本 2.3.1 准备目录 [root@db01 ~]# mkdir -p /data/330{7..9}/data [root@db01 ~]# chown -R mysql. /data 2.3.2 配置文件 cat >/data/3307/my.cnf <<EOF [mysqld] user=mysql basedir=/usr/local/mysql datadir=/data/3307/data socket=/tmp/mysql3307.sock port=3307 [mysql] socket=/tmp/mysql3307.sock EOF cat >/data/3308/my.cnf <<EOF [mysqld] user=mysql basedir=/usr/local/mysql datadir=/data/3308/data socket=/tmp/mysql3308.sock port=3308 [mysql] socket=/tmp/mysql3308.sock EOF cat >/data/3309/my.cnf <<EOF [mysqld] user=mysql basedir=/usr/local/mysql datadir=/data/3309/data socket=/tmp/mysql3309.sock port=3309 [mysql] socket=/tmp/mysql3309.sock EOF 2.2.3 初始化三份数据 mysqld --defaults-file=/data/3307/my.cnf --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data mysqld --defaults-file=/data/3308/my.cnf --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data mysqld --defaults-file=/data/3309/my.cnf --initialize-insecure 2.2.4 启动测试 mysqld_safe --defaults-file=/data/3307/my.cnf & mysqld_safe --defaults-file=/data/3308/my.cnf & mysqld_safe --defaults-file=/data/3309/my.cnf & mysql -S /tmp/mysql3307.sock mysql -S /tmp/mysql3308.sock mysql -S /tmp/mysql3309.sock 2.2.5 准备启动脚本: systemd管理多实例 cd /etc/systemd/system cp mysqld.service mysqld3307.service cp mysqld.service mysqld3308.service cp mysqld.service mysqld3309.service ###################################### cd /etc/systemd/system [root@VM system]# cat mysqld.service [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=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE = 5000 ###################################### #依次修改: sed -i ‘s#ExecStart=/application/mysql/bin/mysqld --defaults-.*$#ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf#g‘ mysqld3307.service sed -i ‘s#ExecStart=/application/mysql/bin/mysqld --defaults-.*$#ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf#g‘ mysqld3308.service sed -i ‘s#ExecStart=/application/mysql/bin/mysqld --defaults-.*$#ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf#g‘ mysqld3309.service 5 授权 chown -R mysql. /data/* --------- 6. 启动 systemctl start mysqld3307.service systemctl start mysqld3308.service systemctl start mysqld3309.service 7. 验证多实例 netstat -lnp|grep 330 mysql -S /data/3307/mysql.sock -e "select @@server_id" mysql -S /data/3308/mysql.sock -e "select @@server_id" mysql -S /data/3309/mysql.sock -e "select @@server_id"
报错提示:初始化失败 报错原因: data目录因为有数据或文件,所以不会初始化 报错处理: 多创建一层目录,用于存放mysql运行时的应用数据 1.新增目录 [root@db01 ~]# mkdir -p /data/330{7..9}/data 2.配置文件修改 cat >/data/3307/my.cnf <<EOF [mysqld] basedir=/application/mysql/ datadir=/data/3307/data socket=/tmp/mysql3307.socket port=3307 EOF3.11.2 不同版本多实例
测试环境使用较多不通版本的实例
0.#准备不同版本,并解压 #连接不通版本,修改环境变量(升级——>替换软链接) ln -s /opt/mysql-5.6.46-linux-glibc2.12-x86_64 /usr/local/mysql56 ln -s /opt/mysql-5.7.30-linux-glibc2.12-x86_64 /usr/local/mysql57 #重名配置文件 [root@db01 ~]# mv /etc/my.cnf /etc/my.cnf.bak #注释环境变量 vim /etc/profile #export PATH=/usr/local/mysql/bin:$PATH #检验:开以个新窗口 [root@db01 ~]# mysql -V -bash: mysql: command not found ---> ok 1. 准备不同目录 [root@db01 ~]# rm -fr /data/331{7..9}/data/* [root@db01 ~]# mkdir -p /data/331{7..9}/data/* 2.准备配置文件 cat >/data/3356/my.cnf <<EOF [mysqld] user=mysql basedir=/usr/local/mysql56 datadir=/data/3356/data socket=/tmp/mysql3356.sock port=3356 [mysql] socket=/tmp/mysql3356.sock EOF cat >/data/3357/my.cnf <<EOF [mysqld] user=mysql basedir=/usr/local/mysql57 datadir=/data/3357/data socket=/tmp/mysql3357.sock port=3357 [mysql] socket=/tmp/mysql3357.sock EOF 3. 初始化数据库 #5.6 5.7 /usr/local/mysql56/scripts/mysql_install_db --defaults-file=/data/3356/my.cnf --user=mysql --basedir=/usr/local/mysql56 --datadir=/data/3356/data #启动成功关键字:两个"ok" /usr/local/mysql57/bin/mysqld --defaults-file=/data/3357/my.cnf --initialize-insecure ----------------- -报错: FATAL ERROR: please install the following Perl modules before executing ... -解决: yum -y install autoconf ------------------ 4. 启动 /usr/local/mysql57/bin/mysqld_safe --defaults-file=/data/3357/my.cnf & /usr/local/mysql56/bin/mysqld_safe --defaults-file=/data/3356/my.cnf & 4.1.配置systemcd启动脚本 #5.6 cat >/etc/systemd/system/mysqld3356.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/mysql56/bin/mysqld --defaults-file=/data/3356/my.cnf LimitNOFILE = 5000 EOF #5.7 cat >/etc/systemd/system/mysqld3357.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/mysql57/bin/mysqld --defaults-file=/data/3357/my.cnf LimitNOFILE = 5000 EOF 5. 启动&测试 [root@db01 ~]# systemctl start mysqld3317.service [root@db01 ~]# systemctl start mysqld3318.service [root@db01 ~]# netstat -lntp | grep 331 tcp6 0 0 :::3317 :::* LISTEN 9529/mysqld tcp6 0 0 :::3318 :::* LISTEN 9557/mysqld 6. 连接 /usr/local/mysql56/bin/mysql -S /tmp/mysql3356.sock /usr/local/mysql57/bin/mysql -S /tmp/mysql3357.sock 或直接: mysql -uroot -p -S /tmp/mysql3356.sock mysql -uroot -p -S /tmp/mysql3357.sock 解决: (-bash: mysql: command not found) [root@db01 ~]# vim /etc/profile export PATH=/usr/local/mysql/bin:$PATH [root@db01 ~]# source /etc/profile [root@db01 ~]# mysql -V mysql Ver 8.0.20 for Linux on x86_64 (MySQL Community Server - GPL) ps : 对于客户端服务端不是同一版本,可以通用连接。 客户端V: mysql Ver 14.14 Distrib 5.7.31 服务端V: Server version: 8.0.18 MySQL Community Server - GPL
5.6的客户端连接8.0的服务端,报错? 8.0验证方式不一样,建议把环境变量设为5.7/8.0的版本,调用相应客户端连接。
[root@db01 ~]# /application/mysql56/bin/mysql -S /tmp/mysql3318.sock
ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql3318.sock‘ (2)
3.11.3 升级1.测试5.6.46 升级到5.7.30
5.6-----> 5.7a. 优雅(干净)的关闭5.6 /usr/local/mysql56/bin/mysql -S /tmp/mysql3356.sock mysql> set global innodb_fast_shutdown=0; [root@db01 data]# /usr/local/mysql56/bin/mysqladmin -S /tmp/mysql3356.sock shutdown b. 高版本挂低版本数据启动 [root@db01 data]# vim /data/3356/my.cnf [mysqld] user=mysql basedir=/usr/local/mysql57 datadir=/data/3356/data socket=/tmp/mysql3356.sock port=3356 [mysql] socket=/tmp/mysql3356.sock [root@db01 ~]# /usr/local/mysql57/bin/mysqld_safe --defaults-file=/data/3356/my.cnf --skip-grant-tables --skip-networking & c. 升级 [root@db01 ~]# /usr/local/mysql57/bin/mysql_upgrade -S /tmp/mysql3356.sock --force Checking server version. Running queries to upgrade MySQL server. Checking system database. mysql.columns_priv OK mysql.db OK mysql.engine_cost OK mysql.event OK mysql.func OK mysql.general_log OK mysql.gtid_executed OK ... ... Upgrading the sys schema. Checking databases. sys.sys_config OK Upgrade process completed successfully. Checking if update is needed. c. 正常重启数据库 [root@db01 data]# /usr/local/mysql57/bin/mysqladmin -S /tmp/mysql3356.sock shutdown [root@db01 data]# /usr/local/mysql57/bin/mysqld_safe --defaults-file=/data/3356/my.cnf &
2.Mysql 5.7.30 Inplace升级到MySQL 8.0.20
5.7-----> 8.03.1 Mysql 5.7.30 Inplace升级到MySQL 8.0.20 7.5.1 升级之前的预检查 a. 安装mysqlsh [root@db01 opt]# tar xf mysql-shell-8.0.20-linux-glibc2.12-x86-64bit.tar.gz [root@db01 opt]# ln -s /opt/mysql-shell-8.0.20-linux-glibc2.12-x86-64bit /usr/local/mysqlsh [root@db01 opt]# cd /usr/local/mysqlsh/ [root@db01 bin]# vim /etc/profile export PATH=/usr/local/mysqlsh/bin:$PATH [root@db01 bin]# source /etc/profile [root@db01 bin]# mysqlsh --version mysqlsh Ver 8.0.20 for Linux on x86_64 - for MySQL 8.0.20 (MySQL Community Server (GPL)) b. 在3357数据库中root@root@10.0.0.%创建链接用户 [root@db01 bin]# mysql -S /tmp/mysql3357.sock -uroot -p123 mysql> create user root@‘10.0.0.%‘ identified with mysql_native_password by ‘123‘; mysql> grant all on *.* to root@‘10.0.0.%‘; c. ***升级前检测 [root@db01 ~]# mysqlsh root:123@10.0.0.51:3357 -e "util.checkForServerUpgrade()" >>/tmp/up.log 7.5.2 正式升级 a. 安装 新版本软件 8.0.20 ok。 b. 停原库 # 1. 快速关库功能关闭(优雅关闭) 连接到数据库中(5.7.30),执行以下语句。 mysql> set global innodb_fast_shutdown=0 ; mysql> select @@innodb_fast_shutdown; mysql> shutdown ; c. 使用高版本软件(8.0.20)挂低版本(5.7.30)数据启动 [root@db01 opt]# vim /data/3357/my.cnf [mysqld] user=mysql basedir=/usr/local/mysql datadir=/data/3357/data socket=/tmp/mysql3357.sock port=3357 default_authentication_plugin=mysql_native_password [mysql] socket=/tmp/mysql3357.sock [root@db01 data]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3357/my.cnf --skip-grant-tables --skip-networking & #启动 并 升级 Ps: 升级时添加参数的意义:1. 跳过网络连接: 不让用户登入操作数据库 2.跳过授权表: 升级时可能升级系统表,尽可能不要占用 d. 重启数据库到正常状态 [root@db01 data]# mysqladmin -S /tmp/mysql3357.sock shutdown [root@db01 data]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3357/my.cnf &
3.MYSQL 体系结构和基础管理
标签:pymysql isa 检测 top 优雅 down bin 管理 最小
查看更多关于3.MYSQL 体系结构和基础管理的详细内容...