mysql数据库进阶第1天

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 //成功

你可能感兴趣的:(数据库,mysql,linux)