mysql 实例 && 多实例

MySQL多实例

什么是实例?

一个进程+多个线程+预分配的内存结构

什么是多实例?

多个进程+多个线程+多个预分配的内存结构

查看变量名的方法

mysqladmin variables |grep "要搜索的大致内容"
mysqladmin variables |grep "pid"
UTOOLS1574835424610.png

多个配置文件:

  • 端口号
  • binlog
  • datadir
  • socket文件
  • 错误日志
  • pid文件
# 1.创建配置文件存放目录
[root@db01 ~]# mkdir /data/{3307,3308,3309} -p
# 2.准备不同的配置文件
[root@db01 ~]# vim /data/3307/my.cnf
[mysqld]
port = 3307
log-bin = mysql-bin
server_id = 7
datadir = /data/3307/data
basedir = /application/mysql
socket = /data/3307/data/mysql.sock
log_error = /data/3307/data/error.log
pid_file = /data/3307/data/mysql.pid

---------------------------------------------
[root@db01 ~]# vim /data/3308/my.cnf

[mysqld]
port = 3308
log-bin = mysql-bin
server_id = 8
datadir = /data/3308/data
basedir = /application/mysql
socket = /data/3308/data/mysql.sock
log_error = /data/3308/data/error.log
pid_file = /data/3308/data/mysql.pid

-----------------------------------------------

[root@db01 ~]# vim /data/3309/my.cnf

[mysqld]
port = 3309
log-bin = mysql-bin
server_id = 9
datadir = /data/3309/data
basedir = /application/mysql
socket = /data/3309/data/mysql.sock
log_error = /data/3309/data/error.log
pid_file = /data/3309/data/mysql.pid

# 3.初始化出不同的datadir
[root@db01 ~]# cd /application/mysql/scripts/
[root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3307/data

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

# 4.启动
#配置文件会去调用 mysqld_safe 然后启动,实际上可以手动执行mysqld_safe
[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 &

# 停服务
[root@db01 scripts]# mysqladmin -S /data/3307/data/mysql.sock shutdown
[root@db01 scripts]# mysqladmin -S /data/3308/data/mysql.sock shutdown
[root@db01 scripts]# mysqladmin -S /data/3309/data/mysql.sock shutdown


# 5.检查端口
[root@db01 scripts]# netstat -lntup
tcp6       0      0 :::3306                 :::*                    LISTEN      50821/mysqld        
tcp6       0      0 :::3307                 :::*                    LISTEN      51145/mysqld        
tcp6       0      0 :::3308                 :::*                    LISTEN      51674/mysqld        
tcp6       0      0 :::3309                 :::*                    LISTEN      51856/mysqld      

# 6.连接
[root@db01 scripts]# mysql -S /data/3307/data/mysql.sock
[root@db01 scripts]# mysql -S /data/3308/data/mysql.sock
[root@db01 scripts]# mysql -S /data/3309/data/mysql.sock

# 7.测试
[root@db01 scripts]# mysql -S /data/3307/data/mysql.sock -e 'show variables like "server_id";'
[root@db01 scripts]# mysql -S /data/3308/data/mysql.sock -e 'show variables like "server_id";'
[root@db01 scripts]# mysql -S /data/3309/data/mysql.sock -e 'show variables like "server_id";'

# 8.编写连接脚本
[root@db01 scripts]# vim /usr/local/bin/mysql3307
mysql -S /data/3307/data/mysql.sock

[root@db01 scripts]# vim /usr/local/bin/mysql3308
mysql -S /data/3308/data/mysql.sock

[root@db01 scripts]# vim /usr/local/bin/mysql3309
mysql -S /data/3309/data/mysql.sock

# 9.编写启动脚本
[root@db01 system]# vim mysql3309.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000

----------------------------------------------------
[root@db01 system]# vim mysql3307.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000

-------------------------------------------------------
[root@db01 system]# vim mysql3308.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000

MySQL的用户管理

Linux用户管理 MySQL用户管理
创建用户:useradd 或者adduser -p create user root@'%'; create user root@'%' identified by '123';
设置密码:passwd username grant all on *.* to root@'%' identified by '123';
删除用户:userdel drop user root@'::1'<br />delete from mysql.user where user='root' and host='::1';
修改用户:usermod update,grant,alter

MySQL用户定义

用户名@'主机域'
root@'localhost'
root@'%'
root@'10.0.0.%'
root@'10.0.%.%'
root@'10.%.%.%'
root@'10.0.0.5%' 范围:50~59 '5'
root@'10.0.0.0/255.255.255.0'

MySQL修改root密码的方式

1.grant

mysql> grant all on *.* to root@'localhost' identified by '123';

2.mysqladmin

[root@db03 ~]# mysqladmin  -uroot -p123 password '456'

3.update

mysql> update mysql.user set password=PASSWORD('1') where user='root' and host='localhost';

mysql> flush privileges;

4.set

#修改当前登录的用户密码
mysql> set password=PASSWORD('123');

生产案例

误删除所有用户

## 方法一:
# 1.停止数据库
[root@db02 ~]# systemctl stop mysqld
# 2.跳过授权表,跳过网络,启动MySQL
[root@db02 ~]# mysqld_safe --skip-grant-tables --skip-networking &
# 3.往表里插数据
mysql> insert into mysql.user(user,host,password) values('root','localhost',PASSWORD('123'));
ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
mysql>  insert into mysql.user(user,host,password,ssl_cipher,x509_issuer,x509_subject) values('root','localhost',PASSWORD(('123'),'','','');

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');

# 4.重启数据库
[root@db02 ~]# /etc/init.d/mysqld restart
# 5.连接数据库
[root@db02 ~]# mysql -uroot -p123


## 方法二:
# 1.停库
[root@db02 ~]# /etc/init.d/mysqld stop
# 2.跳过授权表,跳过网络,启动MySQL
[root@db02 ~]# mysqld_safe --skip-grant-tables --skip-networking &
# 3.刷新授权表
mysql> flush privileges;
# 4.直接创建用户 并授权 给密码
mysql> grant all on *.* to root@'localhost' identified by '123' with grant option;
# 5.重启数据库
[root@db02 ~]# /etc/init.d/mysqld restart

忘记root密码

# 1.停止MySQL
[root@db01 ~]# systemctl stop mysqld
# 2.跳过授权表,跳过网络,启动MySQL
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &
# 3.修改密码
mysql> update mysql.user set password=PASSWORD('1') where user='root' and host='localhost';
# 4.刷新系统授权表
mysql> flush privileges;
# 5.重启数据库
[root@db01 ~]# /etc/init.d/mysqld restart

出现的问题

使用systemctl不能接管mysqld进程

使用netstat -lntup 查看端口号,发现不存在mysqld进程,则以为没有mysqld进程存活
使用systemctl start mysqld 没有输出信息 没有报错 netstat查看没有对应进程及端口出现
使用ps -ef |grep mysqld 查看则发现很多mysqld进程存在 使用kill -9 杀死
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1,MySQL权限体系 mysql 的权限体系大致分为5个层级: 全局层级: 全局权限适用于一个给定服务器中的所有...
    不排版阅读 1,002评论 0 4
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 6,298评论 0 10
  • 一. MySQL密码的恢复方法之一 如果忘记了MySQL的root密码,可以用以下方法重新设置: 1. KILL掉...
    不排版阅读 580评论 0 1
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,123评论 0 19
  • 1.A simple master-to-slave replication is currently being...
    Kevin关大大阅读 6,211评论 0 3

友情链接更多精彩内容