首页 > 其他分享 >升级/参数/连接/权限

升级/参数/连接/权限

时间:2023-03-22 22:23:59浏览次数:55  
标签:用户 123 参数 user mysql 权限 连接

一. 数据库升级

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
    1. 可修改参数
    2. 不可修改参数
  • 会话参数:session
    1. 可修改参数
    2. 不可修改参数
  1. 用户可在线修改非只读参数,只读参数只能预先在配置文件中设置,重启数据库实例后生效
  2. 所有的在线修改过的参数(global/session),在重启后都会丢失,不会写进my.cnf,无法将修改进行持久化
  3. 有些参数,既存在于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. 用户权限管理

  • 系统表权限信息
    1. 用户名和IP是否允许
    2. 查看mysql.user表 // 查看全局所有库权限
    3. 查看mysql.db表 // 查看指定库权限
    4. 查看mysql.table_priv表 // 查看指定表的权限
    5. 查看mysql.column_priv // 查看指定列的权限
tips:desc [tablename]; 可以查看表结构信息
  • 常用权限:
    • SQL语句:SELECT, INSERT, UPDATE, DELETE, INDEX
    • 存储过程:CREATE ROUTINE, ALTER ROUTINE, EXECUTE, TRIGGER
    • 管理权限:SUPER, RELOAD, SHOW DATABASE, SHUTDOWN
  • 可选资源:
    1. MAX_QUERIES_PER_HOUR count
    2. MAX_UPDATES_PER_HOUR count
    3. MAX_CONNECTIONS_PER_HOUR count
    4. MAX_USER_CONNECTIONS count
tips:只能精确到小时,对于部分场景不适用,可以考虑中间件方式  
  • 显示当前用户权限
# 这三个是同一个意思
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

相关文章