Centos7 mysql安装 备份 主从复制

版权声明:仅供学习参考 转载请标明出处。 https://blog.csdn.net/xujiamin0022016/article/details/82385284

Centos7 mysql安装 备份 主从复制

 

 

安装mysql5.6

 

解压二进制包

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

初始化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

 

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

如果忘记密码可以先停止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

 

 

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

./mysqld_safe --skip-grant-tables &

 

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

 

use mysql;

update user set password=password("Hangzhou@123") where user="root";

flush privileges;

修改完之后停止mysql

 

以正常方式启动mysql

密码更新成功 并成功登录

use mysql;

grant all privileges on *.* to 'root'@'%' identified by 'Hangzhou@123' with grant option;flush privileges;

 

 

 

 

用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

 

 

文件夹就是数据库名

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

 

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

备份主库10.6.11.234数据

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

 

 

 

拷贝备份文件至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 &

 

 

 

 

slave 启动成功

 

 

 

总结一下步骤

在主库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.历史查询

 

 

半同步复制

 

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

 

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

 

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

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

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

 

查看是否开启成功

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

测试

停止2台slave

stop slave;

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

 

show status like '%semi%';

 

 

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

 

重启slave

 

 

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

 

 

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:量大的时候一个写成功一个失败)

 

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

 

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

 

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

 

 

 

猜你喜欢

转载自blog.csdn.net/xujiamin0022016/article/details/82385284