MySQL 单实例安装等操作
---MySQL 单实例安装等操作
安装注意以下几点
1.软件安装目录: /usr/local/mysql
2.数据存放目录: /data/
3.配置文件存放目录:/etc/my.cnf
启动过程
1.需要初始化
2.启动
--如果想MySQL 开机自动启动,需要在 /etc/rc.local 文件中添加启动MySQL的命令
/usr/local/mysql/bin/mysqld_safe --defaults-file=/ect/my.cnf &
一、MySQL单实例安装
cd /usr/local/
1.解压MySQL二进制包
tar -zxvf mysql-5.6.16-linux-glibc2.5-x86_64.tar.gz
-v ,输出详细解压内容
2.删除解压前的 tar 包
rm -rf mysql-5.6.16-linux-glibc2.5-x86_64.tar.gz
3.更名
mv mysql-5.6.16-linux-glibc2.5-x86_64/ mysql
--注:为何要改名?不让别人轻易看到版本信息
4.创建MySQL用户
useradd mysql
5.给MySQL安装目录授权
chown -R mysql:mysql mysql
6.创建数据存放目录
mkdir -p /data/mysql
cd /data/
ls --返回 mysql
7.给MySQL数据存放目录授权
chown -R mysql.mysql mysql
8.上传 MySQL 配置文件 my.cnf(单实例);删除系统自带my.cnf ,并将上传文件 更名为 :my.cnf
cd /ect/
rm -rf my.cnf
rz my.cnf_dan
mv my.cnf_dan my.cnf
9.初始化数据库
cd /usr/local/mysql/scripts/
./mysql_install_db --help
./mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/ --defaults-file=/ect/my.cnf --user=mysql
10.配置环境变量并且生效
vim /etc/profile
文本行尾添加一行内容:
export PATH=$PATH:/usr/local/mysql/bin
source /etc/profile
11.启动数据库
cd /usr/local/mysql/bin/
pwd
/usr/local/mysql/bin
./mysqld_safe --help
./mysqld_safe --defaults-file=/etc/my.cnf & ---后台启动数据库
12.查看 MySQL进程
ps -ef|grep mysql
[root@node1 bin]# ps -ef | grep mysql
root 2218 2028 0 18:54 pts/0 00:00:00 /bin/sh ./mysqld_safe --defaults-file=/etc/my.cnf
mysql 2845 2218 0 18:54 pts/0 00:00:01 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql
--plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/error.log --open-files-limit=3072 --pid-file=/data/mysql/node1.pid --socket=/tmp/mysql.sock --port=3306
root 23915 2028 0 19:17 pts/0 00:00:00 grep mysql
[root@node1 bin]# cat /data/mysql/node1.pid
2845
mysql是一个单进程多线程的数据库,这唯一的进程就是pid
oracle是一个多进程的数据库
---安装过程遇到的报错
---启动数据库
cd /usr/local/mysql
cd bin
./mysqld_safe --help
--------default-file 默认配置文件
./mysqld_safe --default-file=/etc/my.cnf & ----后台启动
---查询是否启动成功
ps -ef|grep mysql
----报错
/data/mysql/node3.pid ended --- 这个进程 结束了;也就是执行失败了;看看为啥失败
vi /data/mysql/error.log
[ERROR] Fatal error :Can't open and lock privilege tables :table 'mysql.user' doesn't exist
---原因是没有进行初始化
--初始化权限表
cd /usr/local/mysql
./scripts/mysql_install_db --help
./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --default-file=/etc/my.cnf
---上面命令出现两个OK 表示成功
cd /data/mysql
ls ---查询多了 mysql test 等库相关信息
--启动数据库
cd /data/mysql
./bin/mysqld_safe --help
./bin/mysqld_safe --default-file=/usr/local/mysql &
----又报错
/data/mysql/node3.pid ended --- 这个进程 结束了;也就是执行失败了;看看为啥失败
vi /data/mysql/error.log
Aborting 上面报
'data/mysql/mysql-bin.index' not found (Errcode:13-permission denied)
---权限问题
cd /data/mysql
ll ---发现 mysql-bin.*** 属主属组都是root
---原因是刚才创建授权表的时候使用的 root用户
cd /usr/local/mysql
./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --default-file=/etc/my.cnf
---此动作应该 mysql 用户执行
./scripts/mysql_install_db --help
./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql --default-file=/etc/my.cnf --user=mysql
--如果确实忘记添加 --user=mysql 则手动修改 文件 对应的属主属组
cd /data
chown -R mysql.mysql mysql
--验证一下
cd mysql
ls
---重新启动
cd /data/mysql
./bin/mysqld_safe --help
./bin/mysqld_safe --user=mysql --default-file=/usr/local/mysql &
---再次报错
/data/mysql/node3.pid ended --- 这个进程 结束了;也就是执行失败了;看看为啥失败
vi /data/mysql/error.log
ERROR /usr/local/mysql/bin/mysqld : unknown variable 'default-file=/etc/my.cnf
--不识别
--原因:在 ./bin/mysqld_safe 后面必须 紧跟着 --default-file=/usr/local/mysql 否则报不识别
---重新启动
cd /data/mysql
./bin/mysqld_safe --help
./bin/mysqld_safe --default-file=/usr/local/mysql --user=mysql &
---终于启动成功!
ps -ef|grep mysql
13.登陆数据库
mysql
mysql>
二、关闭数据库的两种方法
1.正常关闭
cd /usr/local/mysql/bin
mysqladmin shutdown
ps -ef|grep mysql
--再次启动数据库
./mysqld_safe --defaults-file=/etc/my.cnf &
--或者绝对路径启动
/usr/local/mysql/bin/mysqld_safe --defaults-file=/ect/my.cnf &
ps -ef | grep mysql
2.非正常关闭数据库
ps -ef | grep mysql
kill -9 28576 27949
ps -ef | grep mysql
3.修改密码等
初始化之后会自动生成MySQL数据库,是系统自动创建的
mysql>show databases;
Database
information_schema
mysql
performance_schema
test
---创建新的 数据库
create database dba;
mysql>show databases;
Database
dba
information_schema
mysql
performance_schema
test
--mysql 数据库下面的users 表,记录了用户的密码、权限等
mysql>use mysql;
mysql>show tables;
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| user |
+---------------------------+
3 rows in set (0.00 sec)
mysq> select user,host,password from user;
---删除其他的,只保留第一行内容
mysql> select user,host,password from user;
+------------------+---------------+-----------+
| user | host | password |
+------------------+---------------+-----------+
| root | localhost | |
| root | rc-bpm-mysql | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | node1 | |
+------------------+---------------+-----------+
6 rows in set (0.02 sec)
mysql> delete from user where user!='root' or host!='localhost';
mysql>select user,host,password from user;
---设置密码
mysql>update user set password=('root123') where user='root';
mysql> select user,host,password from user;
+------------------+---------------+-------------------------------------------+
| user | host | password |
+------------------+---------------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------------------+---------------+-------------------------------------------+
--注:现在 root的密码已经是新的了:root123
切密码设置之后需要刷新才能使密码生效
flush privileges;
---此时再次登陆数据库,不输入密码就会报错
---输入密码后可以正常登陆 (修改密码后一定要使用 mysql -uroot -p 这样的方式登陆,这样别人看不见密码!!!)
mysql> exit
Bye
[root@nodel ~]# mysql -uroot -p
四、root密码管理权限丢失怎么办?(超管权限密码)
ps -ef|grep mysql
---密码丢失之后是无法正常关闭数据库的;只能使用 kill 进程的方式 关闭数据库(非正常形式关闭数据库)
--注:如果知道密码可以在 mysqladmin shutdown 后面跟 -ppassword
[root@nodel ~]# mysqladmin shutdown
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
---此时只能 kill -9 9549
或者:
--跳过授权的tables 表 ,也就是跳过了 mysql 库下面的 users 表 启动MySQL
[root@nodel ~]#/user/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables &
---当使用 上面的命令 ,跳过 users 表 此时不适应密码就可以登陆数据库
[root@nodel ~]# mysql
mysql>
---此时在数据库中修改密码,修改完毕后 还是 使用 kill的方式 ,杀掉数据库 杀掉进程 。重新登陆数据库
mysql>user mysql ;
mysql>update user set password=password('root123') where user='root';
mysql> flush privileges;
mysql>exit;
---非正常模式关闭数据库
ps -ef|grep mysql
kill -9 ...
---使用新密码登陆数据库 密码: root123
[root@nodel ~]#/user/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
[root@nodel ~]# mysql -uroot -p
Enter password:
五、MySQL 多实例安装
1.上传多实例 的 my.cnf 文件 ,并将 单实例 的更名保留 (也可以分成不通的配置文件,一个数据库对应一个,启动按照单实例一个一个启动就可以)
cd /etc
mv my.cnf my.cnf_single.cnf
ll my.*
my.cnf
my.cnf_single.cnf
2.停掉 单实例 数据库
ps -ef|grep mysql
kill -9 ....
3.创建多实例存放目录,并且授权
cd /data/
ls
mysql
mkdir mysql_3306
mkdir mysql_3308
chown -R mysql.mysql:mysql_*
4.初始化 MySQL 数据库,先 指定 3306 实例
cd /usr/local/mysql/scripts/
./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql_3306/ --defaults-file=/etc/my.cnf --user=mysql
---在指定 3308
./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql_3308/ --defaults-file=/etc/my.cnf --user=mysql
5.打开 3306 和3308 库
--注: 开启多实例和单实例 数据库 使用 的 命令是 不一样的
多实例使用 : ./mysqld_multi start port
单实例使用 : ./mysqld_safe --defaults-file=/etc/my.cnf &
cd /usr/local/mysql/bin/
./mysqld_multi start 3306
./mysqld_multi start 3308
./mysqld_multi report
ps -ef|grep mysql
6.进入到 3306 和 3308 库
--注: 进入多实例 使用 套接字 socket的方式 :mysql -S /tmp/mysql_3306.sock
mysql -S /tmp/mysql_3306.sock
mysql -S /tmp/mysql_3308.sock
---多实例:存在于不想花钱的公司,在一台服务器上安装两套MySQL
---这种情况确实很少见,一般是一台安装一个MySQL
六、MySQL多实例改回单实例
1.停掉多实例数据库
cd /usr/local/mysql/bin
./mysqld_multi stop 3306
./mysqld_multi stop 3308
./mysqld_multi report
ps -ef|grep mysql
2.修改配置为 单实例的配置文件
cd /etc
mv my.cnf my_multi.cnf
mv my.cnf_single my.cnf
3.启动单实例数据库
--单实例启动命令
./mysqld_safe --defaults-file=/etc/my.cnf &
4.进入数据库
mysql -uroot -p
mysql>
七、远程连接MySQL数据库
--注:root 用户 只是本地用户,不用用它作为远程用户
--一般情况使用的都是 TCPIP 方式 远程连接数据库
1.在数据库创建用户并授予远程连接权限
mysql>grant all privileges on *.* to 'ss'@'192.168.1.%' identified by '123456';
-- 第一个 * 代表库,'.' 这个代表 这个数据库下的所有表 ,最后一个是 通配符
flush privileges;
2.另一台服务器远程连接 MySQL数据库
--注: 另一台服务器也需要安装 MySQL ,因为是将其当作 客户端来使用 进行远程连接
[root@node2 ~]#mysql -uss -p123456 -h192.168.1.1
八、修改默认端口号3306为其他端口号
--注:在生产中端口号不用使用默认的3306端口,尽可能的改成别的
1.更改端口号,修改配置文件就行
vi /ect/my.cnf
:%s /3306/3308/g
--保存退出
2.关闭数据库
ps -ef|grep mysql
kill -9 ...
3.重启启动数据库
cd /usr/local/mysql/bin/
./mysqld_safe --defaults-file=/etc/my.cnf &
4.再次使用另一台服务器远程连接 此数据库;此时报错:提示无法连接,原因是 端口号被更改,需要手动指定
mysql -uss -p123456 -h192.168.1.1 -P 3308
5.修改成默认端口
vi /etc/my.cnf
:%s/3308/3306/g
--保存退出
---kill 数据库,重新启动
ps -ef|grep mysql
kill -9 ...
重启启动数据库
cd /usr/local/mysql/bin/
./mysqld_safe --defaults-file=/etc/my.cnf &
--再次尝试远程连接,不再需要指定端口号
[root@node2 ~]#mysql -uss -p123456 -h192.168.1.1
mysql>
----注意:也可以使用 套接字 mysql.sock 这种方式登陆数据库,但是只能用在本地,是和root配合使用
ps -ef|grep mysql --找到 socket
mysql -uroot -p1234 -S /tmp/mysql.sock
---root 用户 对应 的host 就是 localhost ,其他用户对应的host 可以是 IP 地址,也可以是一个网段,但千万不能是 %
--注:一般针对 的权限 控制在 OA 系统 比较常见。比如说 只能看见 考勤记录,但是不能看见 薪资情况
---SQL 注入脚本 :无限循环
select * from t;
sleep(100000000);