(10)MySQL多实例安装和备份恢复

前言:
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

  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值