MySQL学习【第04篇】MySQL多实例及root用户密码相关

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_44558760/article/details/88805207

一、MySQL实例初始化配置

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

场景:我要启动实例

问题:

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

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

3)初始化配置文件(/etc/my.cnf)
配置文件读取顺序:

/etc/my.cnf
/etc/mysql/my.cnf
$MYSQL_HOME/my.cnf(前提是在环境变量中定义了MYSQL_HOME变量)
defaults-extra-file (类似include)
~/my.cnf

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


4)优先级结论
命令行
defaults-file
配置文件
预编译

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

#初始化配置文件功能

1)影响实例的启动(mysqld)
2)影响到客户端

mysql
mysqldump
mysqladmin

#如何配置初始化配置文件

1)配置标签分类
[client]所有客户端程序
mysql
mysqldump
...

[server]所有服务器程序
mysqld
mysqld_safe
...

二、MySQL多实例配置

1、什么是多实例?

1)多套后台进程+线程+预分配内存结构

2)多个配置文件
a.多个端口
b.多个socket文件
c.多个日志文件
d.多个server_id

3)多套数据

2、多实例配置实战

多套配置文件:端口;多个data目录;多个socket文件

1)创建数据目录
[root@db01 ~]# mkdir /data/{3307,3308,3309} -p

2)创建并编辑多实例3307、3308、3309的配置文件
[root@db01 ~]# vim /data/3307/my.cnf
[mysqld]
basedir=/application/mysql/
datadir=/data/3307/data
socket=/data/3307/data/mysql.sock
port=3307
log_error=/data/3307/mysql.err
log-bin=/data/3307/mysql-bin
server_id=7

[root@db01 ~]# vim /data/3308/my.cnf
[mysqld]
basedir=/application/mysql/
datadir=/data/3308/data
socket=/data/3308/data/mysql.sock
port=3308
log_error=/data/3308/mysql.err
log-bin=/data/3308/mysql-bin
server_id=8

[root@db01 ~]# vim /data/3309/my.cnf
[mysqld]
basedir=/application/mysql/
datadir=/data/3309/data
socket=/data/3309/data/mysql.sock
port=3309
log_error=/data/3309/mysql.err
log-bin=/data/3309/mysql-bin
server_id=9

3)修改目录权限
[root@db01 ~]# chown -R mysql.mysql /data/

4)分别初始化多实例数据
[root@db01 ~]# cd /application/mysql/scripts
[root@db01 scripts]# ./mysql_install_db --user=mysql --defaults-file=/data/3307/my.cnf --basedir=/application/mysql --datadir=/data/3307/data

[root@db01 scripts]# ./mysql_install_db --user=mysql --defaults-file=/data/3308/my.cnf --basedir=/application/mysql --datadir=/data/3308/data

[root@db01 scripts]# ./mysql_install_db --user=mysql --defaults-file=/data/3309/my.cnf --basedir=/application/mysql --datadir=/data/3309/data

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

6)确认多实例启动成功
[root@db01 scripts]# netstat -lntup

7)分别增加多实例数据库密码
[root@db01 scripts]# mysqladmin -uroot -p -S /data/3307/data/mysql.sock password '3307'
[root@db01 scripts]# mysqladmin -uroot -p -S /data/3308/data/mysql.sock password '3308'
[root@db01 scripts]# mysqladmin -uroot -p -S /data/3309/data/mysql.sock password '3309'

8)分别查看server_id
[root@db01 scripts]# mysql -uroot -p3307 -S /data/3307/data/mysql.sock -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 7     |
+---------------+-------+

[root@db01 scripts]# mysql -uroot -p3308 -S /data/3308/data/mysql.sock -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 8     |
+---------------+-------+

[root@db01 scripts]# mysql -uroot -p3309 -S /data/3309/data/mysql.sock -e "show variables like 'server_id'"
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 9     |
+---------------+-------+

三、MySQL误删root用户,忘记root密码

1、误删除root用户解决方法

1)方法一

1)停止数据库
[root@db02 ~]# /etc/init.d/mysqld stop

2)跳过授权表,跳过网络启动数据库
[root@db02 ~]# mysqld_safe --skip-grant-tables --skip-networking &

3)连接数据库
[root@db02 ~]# mysql

4)插入新root用户
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)重启MySQL
[root@db01 ~]# mysqladmin shutdown
[root@db01 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS! 

2)方法二

1)停止数据库
[root@db02 ~]# /etc/init.d/mysqld stop

2)跳过授权表,跳过网络启动数据库
[root@db02 ~]# mysqld_safe --skip-grant-tables --skip-networking &

3)连接数据库
[root@db02 ~]# mysql

4)刷新授权表
mysql> flush privileges;

5)创建root超级用户
mysql> grant all on *.* to root@'localhost' identified by '123' with grant option;

2、忘记root密码

1)关闭数据库
[root@db02 ~]# /etc/init.d/mysqld stop 

2)启动数据库
[root@db02 ~]# mysqld_safe --skip-grant-tables --skip-networking &
[root@db02 ~]# mysql

3)修改数据库密码
mysql> 
update mysql.user set password=PASSWORD('123') where user='root'and host='localhost'; 

4)刷新权限
mysql> flush privileges;

猜你喜欢

转载自blog.csdn.net/weixin_44558760/article/details/88805207