一. 数据库升级
1. 环境说明:
一般来说,MySQL数据库的二进制数据文件,也就是my.cnf中的配置项datadir所在的位置和我们MySQL应用程序安装的位置是分开的,仅仅通过配置项告诉MySQL数据库的数据存在datadir目录下,当程序和数据分离后,方便我们对数据库应用程序做版本升级和回退。
systemctl stop mysqld
unlink mysql ln -s mysql-5.7.32-linux-glibc2.12-x86_64/ mysql
#此时mysql升级已完成,/etc/init.d/mysqld
#/etc/profile中的PATH增加的/usr/local/mysql/bin
#都不要做任何改变,即可完成mysql的升级。注意,此时只是应用程序升级完成,系统表仍是mysql5.6
cp -r /data/mysql_data/mysql/ /data/mysql_data/mysql_bak
#此步骤为备份系统库,以便回退,但是目前发现回退有bug service mysqld start
#可以使用mysql -uroot -p(原密码)进入数据库
#show databases有test库没有sys库(数据的二进制文件兼容)
#但是看error日志发现有很多warning
#所以这个时候要用mysql_upgrade升级
mysql_upgrade -s -p
#-s一定要加,表示只更新系统表
#-s:upgrade-system-tables如果不加-s会把所有的表以5.7.32的方式重建,线上千万别这样操作,因为二进
#制是兼容的,无需升级。即使通过slave进行升级也推荐该方式,速度比较快
#什么时候不用加-s?当一些老版本的存储格式需要新特性来升级性能时,不加-s。
#5.1.X、5.5.X 、5.6.X 是可以直接通过该方式升级到5.7.X。5.0.X未知,需要测试
二. MySQL的连接方式
1. 几种登录方式
- 方式一 mysql -p
-
- 该方式默认使用root用户,可用select user();查看当前用户
- 方式二 mysql -uroot -p -S /tmp/mysql.sock
-
- 该方式适用在安装mysql的服务器本地登录
- 方式三 mysql -uroot -p -h 127.0.0.1
-
- 使用root@'127.0.0.1'这个用户登录,且用的是tcp/ip的方式
- 方式四 mysql -uroot -h localhost -p
-
- 此方式等价于方式二,且与方式三为不同用户
2、免密登陆
- 方式一 my.cnf增加[client]标签
[client]
user = root
password = 123
#对不同的客户端进行单独定义
[mysql] #这个是/usr/local/mysql/bin/mysql 使用的
user = root
password = 123
[mysqladmin] #这个是给/usr/local/mysql/bin/mysqladmin使用的
user = root
password = 123 每个不同的客户端需要定义不同的标签,使用[client]可以统一
- 方式二 login-path
mysql_config_editor set -G mysql1 -S /tmp/mysql.sock1 -u root -p mysql_config_editor print --all
#login
mysql --login-path=mysql1 #这样登陆不需要密码,且文件是二进制存储,位置是~/.mylogin.cnf
- 方式三 ~/.my.cnf,自己当前的家目录
[client]
user = root
password = 123
三. MySQL参数介绍和设置
一、参数分类
- 全局参数:global
- 可修改参数
- 不可修改参数
- 会话参数:session
- 可修改参数
- 不可修改参数
- 用户可在线修改非只读参数,只读参数只能预先在配置文件中设置,重启数据库实例后生效
- 所有的在线修改过的参数(global/session),在重启后都会丢失,不会写进my.cnf,无法将修改进行持久化
- 有些参数,既存在于global,又存在于session,如autocommit(ps:mysql默认是提交)
二、查看参数
show variables; #显示mysql所有的变量
show variables like '%max_%';
三、设置参数
- 设置全局(global)参数
set global slow_query_log = off; #不加global会报错,slow_query_log是全局参数
- 设置会话(session)参数
set autocommit = 0; #当前会话生效
注意:如果这时候使用/etc/init.d/mysqld restart,则全局的autocommit的值会变成默认值,或依赖于my.cnf的设置值。
select @@session.autocommit; 查询当前autocommit的值
select @@global.autocommit; 查询当前autocommit的值
四. 权限管理
1. "用户+IP"的概念
MySQL中同一个用户名,比如Bob能否登陆以及用什么密码登陆,可以访问什么库等等,都需要加上IP才可以表示一个完整的用户标识[email protected]和bob@localhost以及[email protected]这三个其实是不同的用户标识
2. 用户权限管理
- 系统表权限信息
-
- 用户名和IP是否允许
- 查看mysql.user表 // 查看全局所有库权限
- 查看mysql.db表 // 查看指定库权限
- 查看mysql.table_priv表 // 查看指定表的权限
- 查看mysql.column_priv // 查看指定列的权限
- 常用权限:
-
- SQL语句:SELECT, INSERT, UPDATE, DELETE, INDEX
- 存储过程:CREATE ROUTINE, ALTER ROUTINE, EXECUTE, TRIGGER
- 管理权限:SUPER, RELOAD, SHOW DATABASE, SHUTDOWN
- 可选资源:
-
- MAX_QUERIES_PER_HOUR count
- MAX_UPDATES_PER_HOUR count
- MAX_CONNECTIONS_PER_HOUR count
- MAX_USER_CONNECTIONS count
- 显示当前用户权限
# 这三个是同一个意思
show grants;
show grants for current_user;
show grants for current_user;
3. 基本操作
- 创建用户
create user 'test'@'%'; #创建的用户没有密码
create user 'test'@'%' identified by '123'; #创建密码为123的test用户
- 赋予用户权限
show grants for 'lisi'@'%'; #查看用户权限
grant all on zabbix.* to 'lisi'@'%';
grant all on *.* to 'lisi'@'%' WITH GRANT OPTION; #WITH GRANT OPTION表示可以给其他用户授予权限,如果*.*改成了某个指定的非USER库, 则lisi没法去新建其他用户,因为USER库没有权限了
grant all on zabbix.* to 'lisi'@'%' identified by '123'; #在创建用户时直接赋予权限,如下
grant all on zabbix.* to 'lisi'@'172.16.1.%'; #只允许特定网段的地址连接数据库,等价于下面的SQL
grant all on zabbix.* to 'lisi'@'172.16.1.0/255.255.255.0';
注:生产环境中只用赋予增删改查权限给用户
- 收回用户权限
revoke insert on zabbix from 'lisi'@'%';
revoke drop,create on zabbix from 'lisi'@'%';
revoke all privileges on artifactory.* from artifactory@'10.100.172.%';
- 删除用户
drop user 'test1'@'localhost'; # 如果drop失败,一般是特殊字符或大写,可用以下方式:
delete from mysql.user where user='test1' and host='localhost';
flush privileges;
- 修改root密码
mysqladmin -utest password '123' # 只能为没有密码的用户创建密码
update mysql.user set password=password('2') where user='test' and host='%'; # 可以为任何用户修改密码
flush privileges;
或如下:
set password for root@localhost = password('123');
以下是mysql 8.0以上更新密码
set password for 'tom'@'%' = '123';
标签:用户,123,参数,user,mysql,权限,连接
From: https://www.cnblogs.com/gavin-zheng/p/17245702.html