社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
[root@oldboy mysql-5.6.41]# cp support-files/mysql.server /etc/init.d/mysqld
这条命令是把数据库自带的启动脚本复制到/etc/init.d/目录实现管理MySQL服务的启动和停止。
启动单实例数据库的两种方法:
(1)利用数据库自带的脚本启动数据库
[root@oldboy ~]# /etc/init.d/mysqld start
Starting MySQL.... SUCCESS!
(2)用初始化数据库时MySQL系统给出的方法启动
首先,停止前面已启动的数据库
[root@oldboy ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
然后,使用mysqld_safe启动数据库
[root@oldboy ~]# mysqld_safe --user=mysql &
[1] 1974
[root@oldboy ~]# 190204 17:52:46 mysqld_safe Logging to '/application/mysql/data/oldboy.err'.
190204 17:52:46 mysqld_safe Starting mysqld daemon with databases from /application/mysql/data
启动mysql不输出提示:
[root@oldboy ~]# mysqld_safe --user=mysql >/dev/null 2>&1 &
[1] 2113
检测数据库是否已经启动:
[root@oldboy ~]# ss -lnt | grep 330
LISTEN 0 80 :::3306 :::*
[root@oldboy ~]# ps aux | grep mysql | grep -v grep
root 2113 0.0 0.1 106212 1556 pts/2 S 17:54 0:00 /bin/sh /application/mysql/bin/mysqld_safe --user=mysql
mysql 2207 0.4 44.9 1338832 451796 pts/2 Sl 17:54 0:00 /application/mysql/bin/mysqld --basedir=/application/mysql --datadir=/application/mysql/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=oldboy.err --pid-file=oldboy.pid
[root@oldboy ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
[1]+ Done mysqld_safe --user=mysql > /dev/null 2>&1
(2)使用mysqladmin管理命令关闭数据库
[root@oldboy ~]# mysqladmin -uroot -poldboy123 shutdown
Warning: Using a password on the command line interface can be insecure. ---忽略
[root@oldboy ~]# netstat -antp | grep 330 ---关闭成功
/etc/init.d/mysqld stop
使用mysqladmin命令关闭
mysqladmin -uroot -poldboy123 shutdown ---使用这个命令的最大障碍是必须知道密码
使用“/data/3306/mysql start”命令启动,实质上就是使用mysqld_safe加上不同的实例配置文件参数启动
mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null &
使用mysqladmin命令关闭
mysqladmin -uroot -poldboy123 -S /data/3306/mysql.sock shutdown
客户端连接MySQL服务器原理结构
mysql -uroot -poldboy123 -h 10.0.0.52
本地连接数据库常用的方式一般是Socket连接方式,特别是多实例本地MySQL登录:
mysql -uroot -poldboy123 -S /tmp/mysql.sock
mysql ---刚装完系统无密码情况下的登录方式
mysql -uroot ---无密码情况下指定登录用户
mysql -uroot -p ---标准dba命令行登录命令,交互式输入密码可有效防止密码泄露
mysql -uroot -poldboy123 ---这种登录方式容易泄露密码
防止MySQL密码泄露的小妙招(MySQL安全策略)
1、通过环境变量来强制Linux不记录敏感历史命令
在命令行执行“HISTCONTROL=ignorespace”后,再在输入带密码的命令前面加一个空格登录,登录命令不会被记录到历史记录里
[root@oldboy ~]# HISTCONTROL=ignorespace ---这是临时生效,要想永久生效,需要放入/etc/bashrc中
[root@oldboy ~]# mysql -uroot -poldboy123 ---命令开头要多一个空格
2、操作完敏感的命令后及时删除命令行记录
[root@oldboy ~]# history | tail -4 ---显示历史记录
113 history | tail -10
114 mysql -uroot -poldboy123
115 history -4
116 history | tail -4
[root@oldboy ~]# history -d 114 ---删除序号为114的历史记录
[root@oldboy ~]# history | tail -5 ---序号114对应的带密码的登录命令已经消失
113 history | tail -10
114 history -4
115 history | tail -4
116 history -d 114
117 history | tail -5
可执行“history -c”清除所有记录
[root@oldboy ~]# history -c
[root@oldboy ~]# history
1 history
也可执行“> ~/.bash_history”清除历史记录文件
3、为带密码的启动脚本以及备份脚本加700权限,用户和组改为root
chmod 700 /data/3306/mysql ---如果采用kill信号来关闭数据库,可不执行
chmod 700 /server/scripts/bak.sh ---将密码写入my.cnf配置文件,使得执行备份命令不需要加密码
4、把密码写入my.cnf配置文件并加600权限,用户和组改为mysql
[root@oldboy ~]# cp /application/mysql/my.cnf /etc/
[root@oldboy ~]# grep -A 2 client /etc/my.cnf
[client]
user = root ---注意user和password不能有大写字母,不然识别不了
password = oldboy123
[root@oldboy ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or g.
[root@oldboy ~]# mysql -uroot -p -S /data/3306/mysql.sock
[root@oldboy ~]# mysql -uroot -p -S /data/3307/mysql.sock
单实例异地远程登录
mysql -uroot -p -h 127.0.0.1
多实例异地远程登录
mysql -uroot -p -h 127.0.0.1 -P3306
mysql -uroot -p -h 127.0.0.1 -P3307
1、MySQL提示符设置说明
为了区分日常的正式环境和测试环境,从而避免操作失误,可以对提示符做一定的标记性修改,并且可将其写在配置里永久生效
(1)命令行修改登录提示符
mysql> prompt u@oldboy r:m:s->
PROMPT set to 'u@oldboy r:m:s->'
root@oldboy 09:00:34->
其中,“u@oldboy r:m:s->”中的“u”为登录的数据库用户,“@”为分隔符,后面的oldboy为固定标签,“r:m:s”为时间信息,->为提示符标识
(2)配置文件修改登录提示符
在my.cnf配置文件的[mysql]模块下添加如下内容,重启后,无需重启MySQL,退出当前session,重新登录即可。如果是在my.cnf配置文件中添加的,可以使用“”符号,以避免转义带来的问题
[client]
prompt=\u@oldboy \r:\m:\s->
(3)多实例场景登录提示符说明
在多实例场景下,要想使得提示符配置生效,不仅需要把参数放到my.cnf配置文件里,还需要在连接MySQL时增加“--defaults-extra-file”参数指定修改的配置文件
可通过如下命令修改MySQL多实例配置文件,增加一行配置:
[root@oldboy ~]# head -4 /data/3307/my.cnf
[client]
port = 3307
user = root
password = oldboy123
prompt = \u@oldboy \r:\m:\s->
增加密码参数后,要注意配置文件权限
重新登录,可以发现增加了一个特殊的指定配置文件的参数:
[root@oldboy ~]# mysql --defaults-extra-file=/data/3307/my.cnf -S /data/3307/mysql.sock
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.6.41-log Source distribution
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
root@oldboy 02:18:30->quit
quit
exit
使用快捷键ctrl+c或ctrl+d
操作命令如下:
root@oldboy 02:20:47->quit
安装完MySQL数据库之后,默认的管理员root密码为空(mysql5.7以前),这很不安全。因此,需要为root用户设置一个密码,还可以做一些安全措施:
以下采用更安全的措施来删除root,添加新的管理员用户
1)删除所有mysql中的用户,包括root超级用户:
mysql> delete from mysql.user;
Query OK, 2 rows affected (0.14 sec)
这里的root可以保留,修改为其他用户也可以
2)增加system并将该管理员用户提升为超级管理员,即与root等价的管理员用户,只是名字不同而已:
mysql> grant all privileges on *.* to system@'localhost' identified by 'oldboy123' with grant option;
Query OK, 0 rows affected (0.03 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)
此外,对于带密码的文件或脚本权限,最好是文件用600,脚本用700,用户和组则用root或mysql
1、为root用户设置密码
刚安装完MySQL时是没有密码的,此时可以使用下面的命令为MySQL设置密码
mysqladmin -uroot password 'oldboy123' ---适合单实例
mysqladmin -uroot password 'oldboy123' -S /data/3306/mysql.sock ---适合多实例
提示:命令实在Linux命令行执行的,而不是在mysql命令行
2、为root用户修改密码的方法一:Linux命令行修改法
在Linux命令行下修改密码适合于已知密码的场合
mysqladmin -uroot -poldboy123 password 'oldboy' ---原密码为oldboy123,新密码为oldboy
mysqladmin -uroot -poldboy password 'oldboy123' -S /data/3306/mysql.sock ---适合多实例方式
提示:练习完把密码修改回oldboy123,方面后面练习
3、为root用户修改密码的方法二:SQL语句修改法
在MySQL命令行下修改密码常用于遗忘了密码的情况,或者给不熟悉Linux命令行管理的人员使用
mysql> UPDATE mysql.user SET passowrd=PASSWORD("oldboy123") WHERE user='root' and host='localhost';
Query OK, 1 rows affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges; ---刷新权限使得修改密码生效
Query OK, 0 rows affected (0.04 sec)
此方法更适合密码丢失后,通过“--skip-grant-tables”参数启动数据库,再对密码进行修改的情况
4、为root用户修改密码的方法三:SQL语句修改法
mysql> set password=password('oldboy');
Query OK, 1 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)
此方法有很大的局限性:
1)仅为修改当前用户民吗
2)不适合通过“--skip-grant-tables”方式启动后修改密码
首先停止MySQL服务
[root@oldboy ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
然后,使用mysqld_safe附带的“--skip-grant-tables”(忽略授权登录验证)启动MySQL服务
[root@oldboy ~]# mysqld_safe --skip-grant-tables --user=mysql > /dev/null 2>&1 &
[1] 2897
[root@oldboy ~]# ss -antp | grep 330
LISTEN 0 80 :::3306 :::* users:(("mysqld",3006,10))
现在,无需密码即可登录MySQL
[root@oldboy ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.6.41 Source distribution
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql>
可以将root密码修改为新密码了
mysql> set password=password('oldboy123'); ---此方法无效
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> update mysql.user set password=PASSWORD('oldboy123') where user="system" and host="localhost"; ---正确方法
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
重启MySQL服务
[root@oldboy ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
[1]+ Done mysqld_safe --skip-grant-tables --user=mysql > /dev/null 2>&1
[root@oldboy ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
测试登录
[root@oldboy ~]# mysql -usystem -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.6.41 Source distribution
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql> ---登录成功
注意:加“--skip-grant-tables”参数登录后,修改完密码一定要重启,然后再对外提供服务。如果发现重启后使用MySQL不加密码依然可以登录,请查看是不是配置文件设置了密码。此外,在MySQL命令行使用的密码会覆盖my.cnf配置文件中配置的密码
1、关闭多实例3307MySQL服务
2、启动数据库时加“--skip-grant-tables”,注意,该参数要放到结尾
[root@oldboy ~]# mysqld_safe --defaults-file=/data/3307/my.cnf --skip-grant-tables >/dev/null 2>&1 &
[1] 3608
[root@oldboy ~]# ss -antp | grep 330
LISTEN 0 80 :::3307 :::* users:(("mysqld",3795,11))
3、使用登录命令登录
[root@oldboy ~]# mysql -S /data/3307/mysql.sock
4、修改密码
mysql> update mysql.user set password=PASSWORD('oldboy123') where user="root" and host="localhost";
Query OK, 0 rows affected (0.14 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
重启MySQL服务,使用新密码登录
[root@oldboy ~]# /data/3307/mysql stop
Stopping MySQL...
[root@oldboy ~]# /data/3307/mysql start
Starting MySQL...
[root@oldboy ~]# ss -antp | grep 330 ---重启成功
LISTEN 0 80 :::3307 :::* users:(("mysqld",4236,11))
[root@oldboy ~]# mysql -S /data/3307/mysql.sock ---空密码登录失败
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@oldboy ~]# mysql -uroot -poldboy123 -S /data/3307/mysql.sock
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 2
Server version: 5.6.41-log Source distribution
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql>
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!