mysql基础、安装、账户管理

156 阅读6分钟

主配置文件 /etc/my.cnf

数据库目录 /var/lib/mysql (rpm安装) /usr/local/mysql/data(源码安装)

服务的进程名/端口 mysqld/3306

进程所有者和所属组 mysql/mysql

数据传输协议 tcp

错误日志文件名 /var/log/mysqld.log

system 系统命令: 在mysql里使用系统命令

编译安装

yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake

tar xf  mysql-boost-5.7.20.tar.gz  #mysql boost联合包
cd /opt/mysql-5.7.20/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1


**注意:**  如果在CMAKE的过程中有报错,当报错解决后,需要把源码目录中的CMakeCache.txt文件删除,然后再重新CMAKE,否则错误依旧。


make -j 2
make install


useradd -M -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf

vim /etc/my.cnf	
[client]									
port = 3306
socket=/usr/local/mysql/mysql.sock			

[mysqld]						
user = mysql       					
basedir=/usr/local/mysql				
datadir=/usr/local/mysql/data				
port = 3306						
character-set-server=utf8				
pid-file = /usr/local/mysql/mysqld.pid		        
socket=/usr/local/mysql/mysql.sock			
bind-address = 0.0.0.0					
skip-name-resolve					
max_connections=2048					
default-storage-engine=INNODB				
max_allowed_packet=16M					
server-id = 1						




 echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
 source /etc/profile      //刷新文件使之立即生效



cd /usr/local/mysql/bin/
./mysqld \
 --initialize-insecure \             #生成初始化密码为空
 --user=mysql \                      #指定管理用户
 --basedir=/usr/local/mysql \        #指定数据库的安装目录
 --datadir=/usr/local/mysql/data     #指定数据库文件的存储路径
 
 cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
 
 systemctl daemon-reload
 systemctl enable --now mysqld
 
mysqladmin -uroot -p password '新密码'
回车

或者
mysql 直接登陆
UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('123456') where user='root';
flush privileges 

数据库目录 /usr/local/mysql

yum安装5.7版本

tee /etc/yum.repos.d/mysql.repo <<EOF
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/
enabled=1
gpgcheck=0
EOF


yum -y install mysql-community-server

systemctl start mysqld



grep password /var/log/mysqld.log

mysql -u root -p'密文密码'
alter user root@'localhost' identified by '123123';
set password = password('123456');

数据库目录:/var/lib/mysql

修改数据库服务器的密码策略(设置密码的复杂度)

show variables like "%password%";  #查看与密码相关的配置项

mysql> set global varidate_password_policy=0;  # 修改密码等级为0
mysql> set global validate_password_length=6;  # 修改密码长度为6
临时有效

# 永久有效需要修改配置文件
[root@host50 ~]# vim /etc/my.cnf
[mysqld]      # 在这一行下面添加两句话
validate_password_policy=0   # 修改密码等级为0
validate_password_length=6   # 修改密码长度为6

[root@host50 ~]# systemctl  restart mysqld  重启服务即生效

MySQL数据库字符集设置

(1)编辑vim/etc/my.cnf配置文件,在相应段中加入相应的参数字符集,修改完毕后,重启MySQL服务即可,具体内容如下:


[client]字段里加入:default-character-set=utf8。

[mysqld]字段里加入:character-set-server=utf8。

[mysql]字段里加入:default-character-set=utf8。

(2)

set character-set_client=utf8
set character-set_result=utf8
set character-set_connection=utf8

show charset;
#查看支持字符集

show create table 库.表 \G
查看当前库表字符集

mysql查看版本号

登录时候可以查看或者使用命令select version();

系统 mysql -V

mysql中一些重要的参数

最大连接数,响应的连接数,索引缓冲区的大小,等待行动的秒数,表高速缓存的大小,允许的同时客 户的数量,为所有线程打开表的数量,服务器在关闭它之前在一个连接上等待行动的秒数

新建用户

 CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];

'用户名': 指定将创建的用户名。

'来源地址': 指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost, 允许任意主机登录可用通配符%

'密码':

  • 若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
  • 若使用加密密码,需要先使用SELECT PASSWORD('密码'); 获取密文,再在语句中添加PASSWORD '密文';
SELECT PASSWORD('123456');    #先获取密文  ​  
CREATE USER 'lisi'@'localhost' IDENTIFIED BY PASSWORD '密文';
  • 若省略"IDENTIFIED BY" 部分,则用户的密码将为空(不建议使用)

删除用户信息

 DROP USER 'lisi'@'localhost';

查看用户表

创建后的用户保存在 mysql 数据库的 user 表里。

 USE mysql;    #切换到mysql库
 SELECT User,authentication_string,Host from user;  #查看user表中的用户信息

修改用户名称

格式:
rename user '旧名字' to '新名字;
例:
rename user 'zhangsan'@'192.168.91.%' to 'lisi'@'192.168.91.%';

修改root密码

  • mysqladmin修改 (操作系统管理员 修改本机 数据库服务的登陆密码)

  • ]# mysqladmin -uroot -p旧密码 password 新密码

    隐藏旧密码和新密码,根据提示输入密码

    ]# mysqladmin -uroot -p password

    第一次提示 输入旧密码

    第二次提示 输入新密码 (新密码 要服务密码策略要求)

  • 在数据库使用alter user里修改密码

    alter user root@"localhost" identified by "密码";

修改当前登录用户的密码

 set password = password('123456');

修改其他用户的密码

 set password for 'nancy'@'localhost' = password('abc123');

忘记root用户密码的解决办法

 1、#修改配置文件/etc/my.cnf,不使用密码直接登录到mysql。
 vim /etc/my.cnf
 [mysqld]
 skip-grant-tables          #添加此行,使登录mysql不使用授权表
 skip-networking  #MySQL8.0不需要
 ​
 service mysqld restart     #重启服务
 ​
 mysql    #直接登录,无需密码
 ​
 ​
 2、#使用update命令修改root密码,刷新数据库。
 mysql> UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('123456') where user='root';
 ​
 mysql> flush privileges;   #刷新数据库
 ​
 mysql> quit                #退出
 ​
 mysql -uroot -p123456      #免交互登录的话,"-p密码"不能有空格
 ​
 ​
 3、#删除配置文件中的配置,之后重启服务。
 注意:最后再把/etc/my.conf 配置文件里的skip-grant-tables 删除,并重启mysql服务。
 vim /etc/my.cnf
 service mysqld restart

破解线上数据库服务器管理员root 密码

不用重启服务

  1. 拷贝其他数据库服务器 管理员root用户能正常连接数据库服务的mysql库 覆盖本机的mysql库 !!!!mysql库存放的是 数据库服务器的用户和密码!!!
  2. 查看mysql服务 父进程的pid
  3. 给mysql服务的父进程发送 SIGHUP信息 (作用重新加载数据库目录下的文件 ,可以重新识别mysql库里的用户和密码)
  4. 使用破解后的密码登录(密码和root用户能正常登录服务主机的的root密码一样)

# 将知道密码的数据库mysql目录发给不知道密码的数据库
[root@host50 ~]# scp -r 192.168.4.51:/var/lib/mysql/mysql  /var/lib/mysql/ 
[root@host50 ~]# pstree -p | grep mysqld | head  -1 
[root@host50 ~]# kill  -SIGHUP  1603 
[root@host50 ~]# mysql -hlocalhost -uroot -pNSD2021...a

远程连接mysql

mysql -u 用户名 -p[密码] -h 目标IP/主机名 -P 端口号  

用户授权

 #授予用户权限
 grant 权限列表/ALL ON 库名.表名 to 'username'@'address' [identified by 'XXXXX'];
 ​
 show grants;                               #查看当前用户(自己)的权限
                      
 show grants for 'username'@'address';      #查看其他用户的权限
 ​
 revoke 权限列表/ALL on 库名.表名 from 'username'@'address';    #撤销用户的权限
 ​

查看当前登录用户

 select user ();    #查看当前登录用户和来源地址