解压二进制包
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;
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 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个。从多会提高主从复制的延迟
自己尝试了一下一主 一半同步 一延迟。感觉这样也不错。