前言:
mysql的多实例安装,可以使用不同的端口,创建多个相互隔离的数据库,其实可以使用同一个mysql的配置文件,不同的数据存放目录。像容器一样,相互隔离。
实验环境:
做时间同步,不做时间同步,远程登录的时间不一样,可能会出问题,卸载已安装的mysql数据库或者maridb,防止干扰实验。一台mysql.example.com的虚拟机。
一、多实例安装
[root@mysql ~]# rpm -qa maridb
[root@mysql ~]# rpm -qa mysql
1、安装依赖包时间同步
[root@mysql ~]# yum -y install chrony tar lrzsz libncurses* libaio perl -------安装mysql所需要的依赖包
[root@mysql ~]# systemctl restart chronyd
[root@mysql ~]# systemctl enable chronyd
[root@mysql ~]# hwclock -w
[root@mysql ~]# timedatectl
Local time: Mon 2024-08-05 08:48:59 CST
Universal time: Mon 2024-08-05 00:48:59 UTC
RTC time: Mon 2024-08-05 00:48:59
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes 时间同步
NTP service: active
RTC in local TZ: no
lrzsz只能使用Xshell传输文件,不能传文件夹。
2、解压mysql压缩包和初始化,写配置信息
[root@mysql ~]# tar -xzvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ 大写的C,解压到usr/local目录
[root@mysql ~]# useradd -r -M -s /sbin/nologin mysql ------创建mysql的程序用户
[root@mysql ~]# cd /usr/local/ -------到mysql解压后的目录,安装初始化
[root@mysql local]# ln -sv mysql-5.7.37-linux-glibc2.12-x86_64/ mysql ---制作软链接,相当于重命名
[root@mysql local]# chown -R mysql.mysql mysql -------大写的R是继承,改成mysql程序用户,原本是root,root用户使用的时候,权限会有限制
[root@mysql local]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh ---------写入环境变量,可以使用mysql这条命令,登录的时候,不用写二进制命令
[root@mysql local]# . /etc/profile.d/mysql.sh ----执行mysql.sh的脚本,前面有个点,表示当前目录执行
[root@mysql local]# mkdir /opt/data ------创建存放数据的目录
[root@mysql local]# chown -R mysql.mysql /opt/data/
[root@mysql local]# cd /opt/data/
[root@mysql data]# mkdir 3306 3307 3308 ----------创建三个目录,分别使用3306端口,3307端口和3308端口对应的数据库,初始化三次
[root@mysql data]# mysqld --initialize --datadir=/opt/data/3306 --user=mysql
2024-08-05T00:57:03.749560Z 1 [Note] A temporary password is generated for root@localhost: UCpJu7t(fFKo -----最后一行的最后是默认密码,保存
[root@mysql data]# cd ----切换到root/目录保存密码
[root@mysql ~]# vim 3306-3307_mysql_passwd ------保存三个初始化密码
[root@mysql data]# mysqld --initialize --datadir=/opt/data/3307 --user=mysql
[root@mysql data]# mysqld --initialize --datadir=/opt/data/3308 --user=mysql
[root@mysql ~]# vim 3306-3307_mysql_passwd
[root@mysql ~]# cat 3306-3307_mysql_passwd
UCpJu7t(fFKo
Gksianbab4&Y
-fzBYvlZg8MU
[root@mysql ~]# vim /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe -----两条命令
mysqladmin = /usr/local/mysql/bin/mysqladmin
[mysqld3306]
datadir = /opt/data/3306 ----存放3306端口对应的数据的目录
port = 3306 -----端口号
socket = /tmp/mysql3306.sock ----指针文件
pid-file = /opt/data/3306/mysql_3306.pid ----进程文件
log-error=/var/log/3306.log ----错误日志文件
[mysqld3307]
datadir = /opt/data/3307
port = 3307
socket = /tmp/mysql3307.sock
pid-file = /opt/data/3307/mysql_3307.pid
log-error=/var/log/3307.log
[mysqld3308]
datadir = /opt/data/3308
port = 3308
socket = /tmp/mysql3308.sock
pid-file = /opt/data/3308/mysql_3308.pid
log-error=/var/log/3308.log
[root@mysql ~]# mysqld_multi start 3306
[root@mysql ~]# mysqld_multi start 3307
[root@mysql ~]# mysqld_multi start 3308
[root@mysql ~]# ss -anlt -------查看三个端口运行
3、测试
[root@mysql ~]# cat 3306-3307_mysql_passwd ------查看三个初始密码
UCpJu7t(fFKo
Gksianbab4&Y
-fzBYvlZg8MU
[root@mysql ~]# mysql -uroot -p -S /tmp/mysql3306.sock ------大写的S,指定对应的数据库
密码复制粘贴进入数据库
mysql> set password = password('123'); -----修改密码
mysql> create database ly_3306; -----创建数据库测试
mysql> exit; -----退出
[root@mysql ~]# cat 3306-3307_mysql_passwd
[root@mysql ~]# mysql -uroot -p -S /tmp/mysql3307.sock ----3307端口
Enter password: -----密码看不到,复制直接回车就行了
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.37
mysql> set password = password('123');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database ly_3308;
Query OK, 1 row affected (0.00 sec)
>exit;
[root@mysql ~]# cat 3306-3307_mysql_passwd
[root@mysql ~]# mysql -uroot -p -S /tmp/mysql3308.sock ----3308端口
mysql> set password = password('123');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create database ly_3308;
Query OK, 1 row affected (0.00 sec)
>exit;
[root@mysql ~]# mysql -uroot -p123 -S /tmp/mysql3306.sock
mysql> show databases;
[root@mysql ~]# mysql -uroot -p123 -S /tmp/mysql3307.sock
mysql> show databases;
[root@mysql ~]# mysql -uroot -p123 -S /tmp/mysql3308.sock
mysql> show databases;
二、数据库的备份恢复
前言:
使用数据库备份工具mysqldump做全量备份,使用日志文件做差异备份和增量备份,备份就是将已有的数据,写成sql语句脚本存放到文件里,恢复时执行语句,进行恢复
使用一个数据库和一张表,前面文章里面已经创建好了表
[root@mysql ~]# mysql -uroot -p123;
mysql> show databases;
mysql> use student;
mysql> show tables;
mysql> select * from course;
mysql> select * from student;
1、备份数据库和恢复,全量备份
[root@mysql ~]# mysqldump -uroot -p123 --all-databases > all-20240805.sql ----全量备份数据库
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@mysql ~]# vim all-20240805.sql -----查看有内容
:q!
mysql> drop database student; ---删除数据库student
[root@mysql ~]# mysql -uroot -p123 < all-20240805.sql -----恢复,将all-20240805.sql导入到mysql中
[root@mysql ~]# mysql -uroot -p123
mysql> show databases; -----查看已经恢复
2、全量备份表并恢复
[root@mysql ~]# mysqldump -uroot -p123 student student > table-student-student-bf1.sql 备份student数据库中student表,备份文件命令为table-student-student-bf1.sql。
mysql> exit;
Bye
[root@mysql ~]# ls
复制备份文件的名字table-student-student-bf1.sql
[root@mysql ~]# mysql -uroot -p123
mysql> use student;
mysql> drop table student;
mysql> use student; ------进到对应的数据库恢复表
mysql> source table-student-student-bf1.sql --------执行sql语句恢复表,后面是备份文件名称
mysql> select * from student;
3、差异备份数据
[root@mysql ~]# vim /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
server-id = 1 -----标识
log-bin = mysql_bin ---------开启二进制日志功能
[root@mysql ~]# systemctl restart mysqld
[root@mysql ~]# mysql -uroot -p123
mysql> use student;
mysql> delete from student where name='zz';
[root@mysql ~]# cd /opt/data/ ----到存放数据的目录
[root@mysql data]# mysqladmin -uroot -p123 flush-logs ----在数据库外面使用mysqladmin命令刷新日志
[root@mysql data]# ll | grep 000 -----查看到有两条日志,复制第二个日志文件名字,第一次删除是第二个文件
[root@mysql data]# ll | grep 000
total 123000
-rw-r----- 1 mysql mysql 494 Aug 5 10:41 mysql_bin.000001
-rw-r----- 1 mysql mysql 154 Aug 5 10:41 mysql_bin.000002
-rw-r----- 1 mysql mysql 154 Aug 5 11:07 mysql_bin.000003
mysql> show binlog events in 'mysql_bin.00000';
找出delete上一条信息的pos号是294
#mysqlbinlog --stop-position=356 /opt/data/mysql_bin.000002 | mysql -uroot -p123