Centos7 mysql安装 备份 主从复制

 

 

安装mysql5.6

 

解压二进制包

tar zxf mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz

centos8 备份还原_centos8 备份还原

初始化mysql

mv mysql-5.6.41-linux-glibc2.12-x86_64 mysql
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql mysql/
chgrp -R mysql mysql/
 
cd mysql
cp -a ./support-files/my-default.cnf /etc/my.cnf
cp -a ./support-files/mysql.server  /etc/init.d/mysqld
./scripts/mysql_install_db  --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
如果安装报错
FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db
直接
yum install perl* -y

centos8 备份还原_数据库_02

centos8 备份还原_服务器_03

 

直接输入enter 默认没有密码 输入执行就可以新建密码

centos8 备份还原_mysql_04

如果忘记密码可以先停止mysql服务

service mysql stop
修改/etc/my.cnf
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8 
socket=/usr/local/mysql/mysql.sock
 
[mysqld]
skip-name-resolve
 
socket=/usr/local/mysql/mysql.sock
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_name=1
max_allowed_packet=16M

 

centos8 备份还原_数据库_05

 

修改完之后进入bin目录使用./mysqld_safe --skip-grant-tables &启动

./mysqld_safe --skip-grant-tables &

centos8 备份还原_数据库_06

 

直接./mysql免密登录 修改root 密码

 

use mysql;
update user set password=password("Hangzhou@123") where user="root";
flush privileges;

centos8 备份还原_服务器_07

修改完之后停止mysql

centos8 备份还原_centos8 备份还原_08

 

以正常方式启动mysql
密码更新成功 并成功登录
use mysql;
grant all privileges on *.* to 'root'@'%' identified by 'Hangzhou@123' with grant option;flush privileges;

centos8 备份还原_数据库_09

 

 

 

用Percona-XtraBackup 设置异步备份主从

 

 

安装Percona-XtraBackup-2.3.5

cd /tmp/
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.5/binary/redhat/7/x86_64/percona-xtrabackup-2.3.5-1.el7.x86_64.rpm
yum localinstall percona-xtrabackup-2.3.5-1.el7.x86_64.rpm -y
5.6备份所有数据库
如果你是mysql5.6  你可以直接用innobackupex 备份数据库,使生成的库 直接成为slave库。
 
MD5校验失败 出现这个错误是因为安装Xtrabackup 2.3.5时,没有安装 perl-Digest-MD5组件   不过问题不大也能备份出来  也可以yum安装解决
yum -y install perl-Digest-MD5

 

 

centos8 备份还原_mysql_10

文件夹就是数据库名

centos8 备份还原_centos8 备份还原_11

yum安装依赖之后重新备份不报错了  顺便用1G内存加速一下备份

centos8 备份还原_centos8 备份还原_12

 

截一个第二天没有用内存加速 备份成功的图

备份主库10.6.11.234数据

innobackupex --defaults-file=/etc/my.cnf --host=localhost --user=root  --password=Hangzhou@123 --use-memory=1G(可加可不加)

centos8 备份还原_centos8 备份还原_13

 

 

拷贝备份文件至slave主机

scp -r /tmp/2018-09-04_13-28-53/ 10.6.11.235:/tmp/dbback/
 
登录slave主机10.6.11.235
停止数据库
service mysqld stop数据目录重命名
mv /usr/local/mysql/data /usr/local/mysql/data_bak应用日志   恢复的时候也可以用内存加速哦
  innobackupex --apply-log /tmp/dbback/2018-09-04_13-28-53/ --use-memory=1G
 
chown -R mysql:mysql  /usr/local/mysql
 
启动mysql 建议用./mysqld &

 

 

 

启动mysql 建议用./mysqld &

centos8 备份还原_数据库_14

 

 

centos8 备份还原_服务器_15

 

centos8 备份还原_服务器_16

 

centos8 备份还原_mysql_17

slave 启动成功

 

centos8 备份还原_服务器_18

 

 

总结一下步骤

在主库10.6.11.234上
在预备从库10.6.11.235上
 
1 在主库10.6.11.234上备份
innobackupex --defaults-file=/etc/my.cnf --host=localhost --user=root  --password=Hangzhou@123 --use-memory=1G /tmp
 
2 在主库10.6.11.234上scp备份文件至预备从库10.6.11.235
scp -r /tmp/2018-09-04_13-28-53/ 10.6.11.235:/tmp/dbback/
 
3 停止预备从库10.6.11.235数据库
service mysqld stop
 
4 预备从库10.6.11.235数据库数据目录重命名
mv /usr/local/mysql/data /usr/local/mysql/data_bak
 
5 预备从库10.6.11.235预处理(在主库上执行之后scp过来也可以)
innobackupex --apply-log /tmp/dbback/2018-09-04_13-28-53/ --use-memory=1G
 
6 查看预备从库10.6.11.235上master日志位置
cat xtrabackup_binlog_inbo
 
7 修改预备从库10.6.11.235权限
chown -R mysql:mysql  /usr/local/mysql
 
8 启动预备从库10.6.11.235
cd /usr/local/mysql/bin
./mysqld &
 
9 在预备从库10.6.11.235上设置主从
change master to master_host='10.6.11.234',master_user='root',master_password='Hangzhou@123',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=120,master_connect_retry=30;
 
10 连接预备从库10.6.11.235 查看slave状态
show slave status\G;

 

 

 

 

 

延迟复制

 

延迟复制:

1.误删除恢复

2.延迟测试

3.历史查询

centos8 备份还原_mysql_19

centos8 备份还原_centos8 备份还原_20

 

 

半同步复制

 

默认情况下,MySQL的复制功能是异步的,异步复制可以提供最佳的性能, 主库把binlog日志发送给从库,这一动作就结束了,并不会验证从库是否接收完毕,这一过程,也就意味着有可能出现当主服务器或从服务器端发生故障的时候,有可能从服务器没有接收到主服务器发送过来的binlog日志,这就会造成主服务器和从服务器的数据不一致,甚至在恢复时造成数据的丢失。

 

半同步复制模式必须在主服务器和从服务器端同时开启,否则主服务器默认使用异步复制模式

 

通过 set global rep-semi-sync-master-timeout=milliseconds 设置。需要注意的是作为服务器变量,服务器重启此值不被保存

需要在master配置文件/etc/my.cnf中 加入

centos8 备份还原_centos8 备份还原_21

需要在slave配置文件/etc/my.cnf中 加入

centos8 备份还原_服务器_22

 

查看是否开启成功

SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';

centos8 备份还原_mysql_23

测试

停止2台slave

stop slave;

创建一个db 测试    发现正确 有延迟10s

centos8 备份还原_centos8 备份还原_24

 

show status like '%semi%';

 

 

下图看到slave已经关闭了半同步复制模式

centos8 备份还原_mysql_25

 

重启slave

 

centos8 备份还原_centos8 备份还原_26

 

再测试是否重新切回了半同步复制

centos8 备份还原_服务器_27

centos8 备份还原_数据库_28

 

 

mysql 恢复

 

数据库表被删除了怎么办 怎么恢复

mysql binlog  也自动会删除

 

先判断表是否重要

 

如果非常重要

1.停服务,挂维护页面。保证数据一致性
2.找一个新的数据库。同时,对故障库进行备份
3.恢复前日备份。恢复完毕后。 scp binglog过来。
4.获取备份bin位置。获取故障前一刻 binlog位置。追 binlog

5.启动。测试。
6.对外,启动服务
7.再次备份。

 

如果不重要

1.创建新表

 

mysql5.7需要用到Percona XtraBackup 2.4

 

 

高可用解决方案

参考mha

 

 

架构扩展方案

1.基于复制的扩展
2.客户端分库分表
3.mysql cluster
4. Percona XtraDB Cluster
5. My SQL的 Proxy中间件(mysq1 proxy, mycat)

My SQL > Percona Server > MariaDB

 

性能percona 好于原生mysql

mysql cluster 似乎不好用

 

 

索引及主从建议

可以写库上不建索引 读的就快。从库上建索引 读的就快

从库多的话 还可以每个库建不同的索引

从库一定要readonly  避免连错的误操作

主高可用 从高可用 双主当主从 单写   

生产不建议用双写(双写解决的性能问题 大于带来的数据不同步的问题  ex:量大的时候一个写成功一个失败)

centos8 备份还原_centos8 备份还原_29

 

双主双从 避免一个master 挂了没有从库

centos8 备份还原_服务器_30

 

一主多从  建议用lvs   建议从 不超过3个。从多会提高主从复制的延迟

centos8 备份还原_服务器_31

 

自己尝试了一下一主 一半同步 一延迟。感觉这样也不错。