ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

三、MySQL版本区别及管理

2021-12-25 23:05:29  阅读:136  来源: 互联网

标签:区别 -- root MySQL mysqld user 版本 mysql data


目录

一、MySQL5.6与MySQL5.7的区别

  1. cmake的时候加入了bostorg
  2. 初始化时 使用mysqld --initialize 替代mysql_install_db,其它参数没有变化:--user= --basedir= --datadir=
  3. --initialize会生成一个临时密码
  4. 还可以用另外一个参数--initialize-insecure
[root@dba-01 ~]# yum install -y gcc gcc-c++ automake autoconf

[root@dba-01 ~]# yum install make cmake bison-devel ncurses-devel libaio-devel

[root@dba-01 ~]# wget httpss://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_59_0.tar.gz

# 登录boost.org下载也可以
[root@dba-01 ~]# tar xf boost_1_59_0.tar.gz -C /usr/local/

[root@dba-01 ~]# cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.7.20 \
-DMYSQL_DATADIR=/application/mysql-5.7.20/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.7.20/tmp/mysql.sock \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0 

二、MySQL用户权限管理

1. MySQL用户基础操作

  1. 创建用户:mysql> create user bgx;

  2. 删除用户:delete user drop user
    mysql> drop user bgx; 逻辑操作
    mysql> delete user 物业删除,从表中找到删除

  3. 修改用户:update
    mysql> update mysql.user set host='127.0.0.1' where user='bgx';
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1 Changed: 1 Warnings: 0

注意:update更改密码的时候,必须要flush privileges 一下,不然更改的密码不会立即生效

2. 用户定义

  1. username@'主机域'
  2. 主机域:可以理解为MySQL登录的白名单
  3. 主机域格式:
    '10.0.0.51'
    '10.0.0.5%'
    '10.0.0.%'
    '10.0.%.%'
    '10.%.%.%'
    '%'
    'db01'
    '10.0.0.51/255.255.255.0'

3. 用户实战管理

刚装完MySQL数据库应该做的事情:

  1. 设定初始密码(root@localhost)
[root@dba-01 ~]# mysqladmin -uroot -p password '123'
  1. 使用密码登录
[root@dba-01 ~]# mysql -uroot -p123
  1. 清理无用的用户

4. 误删除了所有用户怎么办?

# 第一步:关闭数据库
[root@dba-01 ~]# /etc/init.d/mysqld stop

# 第二步:启动数据库
[root@dba-01 ~]# mysqld_safe --skip-grant-tables --skip-networking

# 第三步:使用MySQL库
mysql> user mysql;

# 第四步:创建root用户
mysql> insert into mysql.user values ('localhost','root',PASSWORD('123'),
('Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'Y',
'',
'',
'',
'',0,0,0,0,'mysql_native_password','','N');

5. 忘记root密码

# 1. 先关闭数据库
[root@dba-01 ~]# /etc/init.d/mysqld stop

# 2. 启动数据库
[root@dba-01 ~]# mysqld_safe --skip-grant-tables --skip-networking

# 3. 修改root密码
mysql> update user set password=PASSWORD('oldboy123') where user='root' and host='localhost';

6. 用户管理和权限管理

  1. 创建用户
mysql> create user oldboy@'10.0.0.%' identified by '123';
  1. 查看用户
mysql> select user,host  from mysql.user;
  1. 删除用户
mysql>  drop user oldboy@‘10.0.0.%’;
  1. 修改密码
mysql> set password
mysql> update user set password=PASSWORD('oldboy123') where user='root' and host='localhost';
mysql> grant all privileges on *.* to oldboy@’10.0.0.%’ identified by ‘123’;

7. 用户权限设置

MySQL的权限定义:
作用对象:库、表
权限

INSERT,SELECT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN,  PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE

归属
每次设定只能有一个属主,没有属组或其他用户的概念

grant     all privileges    on     *.*    to   oldboy@’10.0.0.%’  identified by    ‘123’;
                权限               作用对象          归属               密码

作用对象分解:

*.* 当前MySQL实例中所有库下的所有表
wordress.* 当前MySQL实例中wordpress库中所有表(单库级别)
wordpress.user 当前MySQL实例中wordpress库中的user表(单表级别)

8. 企业中权限设置

#一般给开发创建用户权限
grant select,update,delete,insert on *.* to oldboy@’10.0.0.%’ identified by ‘123’;

三、MySQL连接管理

MySQL
常见的特定于客户机的连接选项:

  • -u:指定用户
  • -p:指定密码
  • -h:指定密码
  • -S:指定sock
  • -e:指定sql
  • --protocol=name:指定连接方式

连接方式

  1. socket连接
mysql -uroot -poldboy123 -S/application/mysql/tmp/mysql.sock
mysql -uroot -poldboy123
  1. TCP/IP
mysql -uroot -poldboy123 -h10.0.0.51 -P3306

四、MySQL启动关闭流程

image

启动

/etc/init.d/mysqld start ------> mysqld_safe ------> mysqld

关闭

/etc/init.d/mysqld stop 
mysqladmin -uroot -poldboy123 shutdown
kill -9 pid ?
killall mysqld ?
pkill mysqld ?

出现问题:

  1. 如果在业务繁忙的情况下,数据库不会释放pid和sock文件
  2. 号称可以达到和Oracle一样的安全性,但是并不能100%达到
  3. 在业务繁忙的情况下,丢数据(补救措施,高可用)

五、MySQL实例初始化设置

1. 初始化配置文件的作用

场景:我要启动实例

问题:
1)我不知道我的程序在哪?
2)我也不知道我将来启动后去哪找数据库?
3)将来我启动的时候启动信息和错误信息放在哪?
4)我启动的时候sock文件pid文件放在哪?
5)我启动,你们给了我多少内存?
...
N)我还有很多问题需要在我启动之前告诉我,emmmmm....

image

  1. 预编译:cmake去指定,硬编码到程序当中去
  2. 在命令行设定启动初始化配置
--skip-grant-tables 
--skip-networking
--datadir=/application/mysql/data
--basedir=/application/mysql
--defaults-file=/etc/my,cnf
--pid-file=/application/mysql/data/db01.pid
--socket=/application/mysql/data/mysql.sock
--user=mysql
--port=3306
--log-error=/application/mysql/data/db01.err
  1. 初始化文件配置(/etc/my.cnf)

配置文件读取顺序:
/etc/my.cnf
/etc/mysql/my.cnf
$MYSQL_HOME/my.cnf(前提是在环境变量中定义了MYSQL_HOME变量)
defaults-extra-file (类似include)
~/my.cnf

image

--defaults-file:默认配置文件

如果使用./bin/mysqld_safe 守护进程启动mysql数据库时,使用了 --defaults-file=<配置文件的绝对路径>参数,这时只会使用这个参数指定的配置文件。

思考:

#cmake:
socket=/application/mysql/tmp/mysql.sock
#命令行:
--socket=/tmp/mysql.sock
#配置文件:
/etc/my.cnf中[mysqld]标签下:socket=/opt/mysql.sock
#default参数:
--defaults-file=/tmp/a.txt配置文件中[mysqld]标签下:socket=/tmp/test.sock

优先级结论:

  1. 命令行
  2. defaults-file
  3. 配置文件
  4. 预编译

2. 初始化配置文件的使用

初始化配置文件功能:

  1. 影响实例启动(mysqld)
  2. 影响到客户端
  • mysql
  • mysqldump
  • mysqladmin

如何配置初始化配置文件

  1. 配置标签分类
    [client]所有客户端程序
    mysql
    mysqldump
    ...
    [server]所有服务器端
    mysqld
    mysqld_safe
    ...

六、MySQL多实例配置

什么是多实例?
(进程+多个线程+已分配内存结构)*多个

  • 多套后台进程+线程+内存结构
  • 多个配置文件
    • 多个端口
    • 多个socket文件
    • 多个日志文件
    • 多个server_id 文件
  • 多套数据

实战

#创建数据目录
[root@db01 ~]# mkdir -p /data/330{7..9}

#创建配置文件
[root@db01 ~]# touch /data/330{7..9}/my.cnf

#编辑3307配置文件
[root@db01 ~]# vim /data/3307/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
log-bin=/data/3307/mysql-bin
server_id=7
port=3307
[client]
socket=/data/3307/mysql.sock

#编辑3308配置文件
[root@db01 ~]# vim /data/3308/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
log-bin=/data/3308/mysql-bin
server_id=8
port=3308
[client]
socket=/data/3308/mysql.sock

#编辑3309配置文件
[root@db01 ~]# vim /data/3309/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
log-bin=/data/3309/mysql-bin
server_id=9
port=3309
[client]
socket=/data/3309/mysql.sock

#初始化3307数据
[root@db01 ~]#/application/mysql/scripts//mysql_install_db --user=mysql --defaults-file=/data/3307/my.cnf --basedir=/application/mysql --datadir=/data/3307/data

#初始化3308数据
[root@db01 ~]#/application/mysql/scripts//mysql_install_db --user=mysql --defaults-file=/data/3308/my.cnf --basedir=/application/mysql --datadir=/data/3308/data

#初始化3309数据
[root@db01 ~]#/application/mysql/scripts/mysql_install_db \
--user=mysql \
--defaults-file=/data/3309/my.cnf \
--basedir=/application/mysql --datadir=/data/3309/data

#修改目录权限
[root@db01]# chown -R mysql.mysql /data/330*

#启动多实例
[root@db01]# mysqld_safe --defaults-file=/data/3307/my.cnf &
[root@db01]# mysqld_safe --defaults-file=/data/3308/my.cnf &
[root@db01]# mysqld_safe --defaults-file=/data/3309/my.cnf &

#查看server_id
[root@db01]# mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"
[root@db01]# mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'"
[root@db01]# mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'"

标签:区别,--,root,MySQL,mysqld,user,版本,mysql,data
来源: https://www.cnblogs.com/studyhub/p/15729524.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有