db2
day1
机器准备
192.168.4.50 fay50
192.168.4.51 fay51
192.168.4.52 fay52
192.168.4.53 fay53
192.168.4.54 fay54
192.168.4.55 fay55
生产环境每天任务
每天对服务器的数据备份
cp/tar(停服务) mysqldump(锁表) binlog(需要查上次记录的位置) innobackupex (不锁表,恢复时停服务,删库)
备份方式? 备份时间 备份策略? 周一 完全备份 周2-7 增量备份 数据存储空间(在服务器本机备份是有风险的,存储空间可动态扩展lv逻辑券)
计划任务
40 02 * * 1 /root/allbak.sh 完全备份
00 03 * * 2-7 /root/newbak.sh 增量备份
在fay50
[root@fay50 ~]# scp -r /fullbak/ 192.168.4.51:/root
[root@fay50 ~]# scp -r /new1dir/ 192.168.4.51:/root
在fay51
[root@fay51 ~]# systemctl stop mysqld
[root@fay51 ~]# rm -rf /var/lib/mysql/*
[root@fay51 ~]# innobackupex --apply-log --redo-only /root/fullbak/
[root@fay51 ~]# cat /root/fullbak/xtrabackup_checkpoints
[root@fay51 ~]# innobackupex --apply-log --redo-only /root/fullbak/ --incremental-dir=/root/new1dir
[root@fay51 ~]# cat /root/fullbak/xtrabackup_checkpoints
[root@fay51 ~]# rm -rf /root/new1dir/
[root@fay51 ~]# innobackupex --apply-log --redo-only /root/fullbak --incremental-dir=/root/new2dir
[root@fay51 ~]# innobackupex --copy-back /root/fullbak
[root@fay51 ~]# rm -rf /root/new2dir/
[root@fay51 ~]# innobackupex --copy-back /root/fullbak
[root@fay51 ~]# ls /var/lib/mysql -l
[root@fay51 ~]# chown -R mysql:mysql /var/lib/mysql
[root@fay51 ~]# ls /var/lib/mysql -l
[root@fay51 ~]# systemctl start mysqld
[root@fay51 ~]# mysql -uroot -p123qqq…A
mysql> select count(*) from db3.user;
fay51 主
fay52 从
构建主从同步
构建思路
配置主库
-启用binlog日志,
重启数据库服务
授权用户,查看binlog日志信息
配置从服务器
-确保与主服务器数据一致
-修改配置文件,设置server_id,
-指定主库信息,
-启动slave程序
在fay51上 主服务器
[root@fay51 ~]# vim /etc/my.cnf //修改配置文件
[mysqld]
log_bin=db51
server_id=51
[root@fay51 ~]# systemctl restart mysqld //重启服务器
[root@fay51 ~]# mysql -uroot -p123qqq…A //登录数据库
mysql> grant replication slave on . to repluser@"%" identified by “123qqq…A”; //为从服务器配置链接同步数据的权限
在fay52上 从服务器
[root@fay52 ~]# vim /etc/my.cnf
[mysqld]
server_id=52
[root@fay52 ~]# systemctl restart mysqld
在fay51(主)
[root@fay51 ~]# mysqldump -uroot -p123qqq…A --master-data db3 > /db3.sql
[root@fay51 ~]# scp /db3.sql [email protected]:/root
在fay52上(从)
[root@fay52 ~]# mysql -uroot -p123qqq…A db3 < /root/db3.sql
[root@fay52 ~]# vim db3.sql
CHANGE MASTER TO MASTER_LOG_FILE=‘db51.000001’, MASTER_LOG_POS=441; //日志文件名,和最后的偏移量
[root@fay52 ~]# mysql -uroot -p123qqq…A
mysql> change master to
-> master_host=“192.168.4.51”, //定义主库ip地址
-> master_user=“repluser”, //主库授权用户
-> master_password=“123qqq…A”, //授权用户密码
-> master_log_file=“db51.000001”, //主库日志文件
-> master_log_pos=441; //日志偏移量
mysql> start slave; //启动slave进程
mysql> show slave status\G;
Master_Host: 192.168.4.51 //查看主服务器
Slave_IO_Running: Yes //查看io线程状态
Slave_SQL_Running: Yes //查看sql进程状态
配置从服务器
相关文件
-存放在数据库目录下 会有4种文件
master.info 主库信息
relay-log.info 中继日志信息
主机名-relay-bin.xxxxxx 中继日志
主机名-bin.index 索引文件
如果从数据库配置失败
排错方法1
解决办法: 删除4种类型文件 ,还原成独立库,再重启服务
/var/lib/mysql/
master.info 主库信息
relay-log.info 中继日志信息
fay52-relay-bin.index 引索文件
fay52-relay-bin.000001 中继日志
fay52-relay-bin.000002 中继日志
删除db3.qsl 重新从主库传最新的
删除本地db3,在创建干净的db3库
systemctl restart mysqld
排错方法2
不删除4种方法的排错
看last last erro 和lsat sql error ;
出错1
排io的错,如果用master id错,需要检查配置文件的server_id=…
mysql>stop slave ; //停止从服务器的服务
mysql>start slave; //开启从服务器服务
show slave status\G; //查看从服务器状态
出错2
排io的错,如果是connecting 状态,链接主库的用户名和密码在/var/lib/mysql/master.info里面,
在主库
mysql>select host,user from mysql.user where user=“repluser”; //查看用户名是否存在,不存在就是主从库授权用户名对不上
mysql>set password for repluser@"%"=password(“123qqq…A”); //重置日志
在从库
mysql>stop slave ; //停止从服务器的服务
mysql>grant replication slave on . to repluser@"%" identified by “123qqq…A”; //重新授权主库的用户
mysql>start slave; //开启从服务器服务
mysql>show slave status\G; //查看从服务器状态
排错3
排io错,克隆已有的数据库虚拟机出现的错.the salve stops because the master and salve has the same uuid
/var/lib/mysql/auto.cnf 存放uuid的,修改其中一个的uuid,让他们不一样
systemctl restart mysqld
排错4
排io的错,got fatal error 1236 from master when reading data from binary log:"client …could not find position
查看/var/lib/mysql/my.cnf
CHANGE MASTER TO MASTER_LOG_FILE=‘db51.000001’, MASTER_LOG_POS=441; //日志文件名,和最后的偏移量
去主库查看
mysql>show master status; //查看最新的日志名和偏移量
再修改从库的配置文件
查看/var/lib/mysql/my.cnf
CHANGE MASTER TO MASTER_LOG_FILE=‘db51.00000x’, MASTER_LOG_POS=xxx; //最新的日志文件名,和最后的偏移量
mysql> change master to
-> master_host=“192.168.4.51”, //定义主库ip地址
-> master_user=“repluser”, //主库授权用户
-> master_password=“123qqq…A”, //授权用户密码
-> master_log_file=“db51.000001”, //主库日志文件
-> master_log_pos=441; //日志偏移量
排错5
排sql的错,如果是因为没有建db3且为空,或者db3没有创建,或者代表3存在但是有数据,需要删除后再建一个空的db3
mysql>stop slave ; //停止从服务器的服务
mysql>start slave; //开启从服务器服务
show slave status\G; //查看从服务器状态
测试配置
方法1
主 fay51 上
建新库,新表,插入记录
例子
mysql> create database db4;
mysql> create table db4.user4(id int);
mysql> insert into db4.a values(99);
mysql> insert into db4.a values(99);
mysql> insert into db4.a values(99);
mysql> create table db3.user4(name char(10));
mysql> insert into db3.user2 values(99,“cherry”);
mysql> select * from db3.user2; //查看
mysql> select * from db4.a; //查看
从 fay52 上
可以查看到相同的记录
mysql> select * from db3.user2; //查看
mysql> select * from db4.a; //查看
客户端 fay50 192.168.4.50
主: fay51 192.168.4.51
从: fay52 192.168.4.52
在主 fay51上
mysql> grant select ,insert on . to yaya99@"%" identified by “123qqq…A”; //创建新的授权用户
在客户端fay50
[root@fay50 ~]# mysql -h192.168.4.51 -uyaya99 -p //用授权用户登录
Enter password:
mysql> insert into db3.user4 values(“bob”),(“kong”),(“quen”); //插入新的数据
mysql> select * from db3.user4; //查看插入的内容
在主fay51验证
mysql> select * from db3.user4; //查看相同的内容
在主fay52验证
[root@fay52 ~]# mysql -h192.168.4.51 -uyaya99 -p //相同的授权用户登录
Enter password:
mysql> select * from db3.user4; //查看相同的内容
结构类型
基本应用
单向复制:一主 <— 一从
扩展应用
一主多从: 从 <— 主 —> 从
|
V
从
链式复制 主 <-- 从 <— 从
互为主从 : 主 <------> 从
配置一主多从 同步结构
要求:把数据库服务器192.168.4.53 也配置为51的从服务器
数据库服务器192.168.4.53的配置如下:
1.验证主服务器的51的授权用户
2.指定server_id
3.确保与主服务器数据一致
4.指定主服务器信息
5.启动slave程序
6.查看状态信息
突发状况,fay53的mysql没有装,改用fay54代替
fay51
[root@fay51 ~]# mysqldump -uroot -p123qqq…A --master-data -B db3 db4 > /root/dbtwo.sql //对主数据库进行备份 B指定多库备份
[root@fay51 ~]# scp /root/dbtwo.sql [email protected]:/root //把备份文件拷贝到fay54
fay54上
[root@fay54 ~]# vim /etc/my.cnf //设置id
[mysqld]
server_id=54
[root@fay54 ~]# systemctl restart mysqld //重启服务,加载最新配置
[root@fay54 ~]# mysql -uroot -p123qqq…A < /root/dbtwo.sql //导入备份数据
[root@fay54 ~]# grep -i db51 /root/dbtwo.sql //查看日志文件和日志偏移量
CHANGE MASTER TO MASTER_LOG_FILE=‘db51.000001’, MASTER_LOG_POS=2642;
[root@fay54 ~]# mysql -uroot -p123qqq…A //进入本机数据库
mysql> change master to master_host=“192.168.4.51”, //设置主数据库的信息
-> master_user=“repluser”,
-> master_password=“123qqq…A”,
-> master_log_file=“db51.000001”,
-> master_log_pos=2642;
mysql> start slave; //开启从服务
mysql> show slave status\G; //查看从配置状态
Master_Host: 192.168.4.51
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在客户端fay50
[root@fay50 ~]# mysql -h192.168.4.51 -uyaya99 -p123qqq…A
mysql> insert into db3.user4 values(“king”);
mysql> insert into db3.user4 values(“quen”);
mysql> insert into db3.user4 values(“jack”);
mysql> select * from db3.user4;
在从fay54验证
[root@fay54 ~]# mysql -h192.168.4.51 -uyaya99 -p
mysql> select * from db3.user4;
mysql> exit
[root@fay54 ~]# systemctl stop mysqld
[root@fay54 ~]# cd /var/lib/mysql
[root@fay54 mysql]# rm -rf master.info
[root@fay54 mysql]# rm -rf relay-log.info
[root@fay54 mysql]# rm -rf fay54-relay-bin.000*
[root@fay54 mysql]# rm -rf fay54-relay-bin.index
配置第二个主服务器fay54
为了防止出错
把fay54修改主机名fay53
[root@fay54 mysql]# hostnamectl set-hostname fay53
[root@fay54 mysql]# vim /etc/my.cnf
[mysqld]
server_id=53
log-bin=53
[root@fay54 mysql]# systemctl restart mysqld
[root@fay53 ~]# mysql -uroot -p123qqq…A
把fay55改成fay54
[root@fay55 ~]# hostnamectl set-hostname fay54
[root@fay54 mysql]# vim /etc/my.cnf
[mysqld]
server_id=54
log-bin=54
log_slave_updates
[root@fay54 ~]# systemctl restart mysqld
mysql> grant replication slave on . to repluser2@"%" identified by “123qqq…A”;
Query OK, 0 rows affected, 1 warning (0.05 sec)
mysql> show master status;
mysql> start slave;
mysql> show slave status\G;
Master_Host: 192.168.4.53
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
Last_IO_Error: error connecting to master ‘[email protected]:3306’ - retry-time: 60 retries: 1
出错1
fay54
[root@fay54 ~]# mysql -uroot -p123qqqq…A //排错,密码多了一个Q
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
排错,密码多了一个Q
出错2
Master_Host: 192.168.4.53
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
班长排错:
由于ip错了,需要修改配置文件
[root@fay54 mysql]# vim /var/lib/mysql/master.info
25
db53.000003
441
192.168.4.53 ///改成192.168.4.54
repluser
123qqq…A
3306
60
0
班长排错fay53容量不够
[root@fay53 ~]# rm -rf mysql-community-* //删除扩容前占内存的东西
[root@fay53 ~]# ls
[root@fay53 ~]# df -h
[root@fay53 ~]# LANG=EN growpart /dev/vda 1 //扩容
[root@fay53 ~]# xfs_growfs /dev/vda1
[root@fay53 ~]# df -h //扩容成功后
[root@fay53 ~]# ls
[root@fay53 ~]# tar -xf mysql-5.7.17.tar //再重新下载
fay56
出错
[root@fay56 ~]# LANG=EN growpart /dev/vda 1 //执行不成功说明已经执行过了
NOCHANGE: partition 1 is size 41940959. it cannot be grown
班长排错
[root@fay56 ~]# xfs_growfs /dev/vda1
[root@fay56 ~]# df -h //成功