MySQL数据库主从备份同步
文章目录
MySQL备份与恢复实验
1.启动多实例(监听端口3307和3308)
1.创建多实例目录
mkdir -p /data/mysql/{3307,3308}/data
chown -R mysql.mysql /data/3307 /data/3308
2.在不同的实例目录中编辑my.cnf
[mysqld]
user = mysql
port = 3307
socket = /data/3307/mysql.sock
basedir = /usr/local/mysql
datadir = /data/3307/data
log-error = /data/3307/mysql-error.log
pid-file = /data/3307/mysql.pid
log_slave_updates = 1
#log-bin = /data/mysql/3307/mysql-bin
3.初始化数据文件
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data/
4.启动mysql多实例
mysqld_safe --defaults-file=/data/3308/my.cnf
出现问题,但是给了权限好像还是没有办法解决,于是手动创建错误日志文件
touch /data/3308/mysql-error.log
再次启动,ok
mysqld_safe --defaults-file=/data/3308/my.cnf
在另一个终端查看是否成功启动
ss -tnlp | grep mysql
重新启动
mysqld_safe --defaults-file=/data/mysql/3308/my.cnf > /dev/null 2>&1 &
登陆mysql多实例
mysql -u root -p -S /data/3308/mysql.sock
2.开启3307实例的binlog日志
1.写入配置文件
vim /data/3307/my.cnf
log-bin = /data/3307/mysql-bin
2.关闭3307实例再打开
mysqladmin -u root -p -S /data/3307/mysql.sock shutdown
mysqld_safe --defaults-file=/data/mysql/3307/my.cnf > /dev/null 2>&1 &
3.登陆mysql检验结果
mysql -u root -p -S /data/3307/mysql.sock
show variables like "%log_bin%";
3.在3307的实例上创建pldb,并建表student插入数据(n个用户)
1.创建pldb数据库并进入
create database pldb;
use pldb;
2.建student表
create table student( \
id int(4) not null,\
name char(20) not null,\
age tinyint(2) not null default '0',\
dept varchar(16) default null\
);
3.插入数据
insert into student value(1,'haha',1,'CS');
insert into student value(1,'hehe',1,'CS'),(1,'xixi',1,'CS');
4.备份pldb数据库的数据(–master-data=2)
mysqldump -u root -p -B --master-data=2 -S /data/3307/mysql.sock pldb > /data/3307/pldb.dump
–master-data=2 加入后 文件多了一段文字
5.3307实例新数据写入数据库(插入新数据)
insert into student(id,name) values(1,'hoho');
6.将所有pldb数据库的数据恢复到3308实例中
mysql -u root -p -S /data/3308/mysql.sock
source /data/3307/pldb.dump;
use pldb;
select * from student;
复制了全备部分
复制binlog内容,导出binlog日志
mysqlbinlog mysql-bin.000004 --start-position=120 > /tmp/binlog.sql
进入数据库(注意切库)
use pldb;
source /tmp/binlog.sql
全部复制完毕!
MySQL主从复制实验
3307作为master主库,3308作为从库
要求3308的主库数据与3307的实时同步
测试过程自行完成
1.master开启binlog
[mysqld]
log_bin=/data/mysql/3306/mysql-bin
2…创建用户用于主从复制
grant replication slave on *.* to 'plrep'@'localhost' identified by 'reppass';
3.主库全量备份,查看主库binlog信息
mysqldump -u root -p -S /data/3307/mysql.sock -B pldb --master-data=2 > /tmp/pldb_bak.sql
show master logs;
cat /tmp/pldb_bak.sql
4.从库做全量恢复
mysql -u root -p -S /data/3308/mysql.sock
source /tmp/pldb_bak.sql;
5.从库设定主库信息(先分别设置server-id)
CHANGE MASTER TO \
MASTER_HOST='localhost' ,
MASTER_PORT=3307,
MASTER_USER='plrep' ,
MASTER_PASSWORD='reppass' ,
MASTER_LOG_FILE='mysql-bin.000004' ,
MASTER_LOG_POS=556;
6.开启主从复制
start slave;
7.测试
一开始两台实例都一样的内容
在3307插入内容
insert into student(id,name) values(2,'gaga');
3308也同步更新了