c4rt1y

mysql学习笔记

0x01 mysql性能和扩展简介

主要是为了提神mysql的性能,通过优化参数和MySQL架构扩展方案进行测试。由于参数优化,测试效果不是特别明显,所以还是以扩展方案为主。
扩展方案分为以下几个点:
  1.基于复制扩展
  2.客户端分库分表
  3.MySQL Cluster
  4.Percona XtraDB Cluster
  5.MySQL Proxy中间件(MySQL Proxy、mycat)

从效率上来划分,如下:
  MySQL > Percona Server > MariaDB
  基于复制的扩展 > 客户端分库分表 > MySQL PXC > MySQL Proxy中间件 > MySQL Cluster

这里主要演示,以复制扩展为演示案列

0x02 环境安装

#一共2台服务器
master.com 10.10.10.20
node01.com 10.10.10.30

#关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

#两种方法设置host(每台对应每台的host地址)
echo "master.com" > /etc/hostname
hostname master.com

#设置host
cat >>/etc/hosts <<EOF 
10.10.10.20 master.com 
10.10.10.30 node01.com
EOF 

#关闭selinux,需要重启
sed -i 's:SELINUX=enforcing:SELINUX=disabled:g' /etc/selinux/config

#临时关闭seLinux
setenforce 0

#下载mysql源
rpm -ivh  http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
#检测源是否安装
yum repolist enabled | grep mysql  
#安装mysql,直接yum安装会安装MariaDB,这里会出现zabbix编译的时候出现不存在mysql_config文件
yum install mysql-community-server mysql-devel -y
#启动mysql

#重启
reboot

0x03 mysql性能拓扑图

mysql主从

new-centos

mysql主从只读

new-centos

mysql主主

new-centos

mysql主主只读

new-centos

mysql一主多从只读

new-centos

负载均衡mysql(keepalived+lvs+mysql一主多从)

new-centos

0x04 mysql主从

#这里演示主从关系

##master上
#进入数据库
mysql -uroot -p
#创建数据库
create database db1;
#创建一个权限给slave服务器
grant replication slave on *.* to 'c4rt1y'@'10.10.10.30' identified by '123123';

#查看状态,组要是获取File的内容
show master status;

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      317 |              |                  | 
+------------------+----------+--------------+------------------+


##slave上执行
#修改为和master不一样
vi /etc/my.cnf
{
    server-id=2
}
#重启mysqld
systemctl restart mysqld.service

#进入mysql
mysql -u root -p
#创建数据库
create database db1;
#停止
slave stop;
#连接主,这里的master_log_file和master_log_pos是master查到的
change master to master_host='10.10.10.10', master_port=3306,master_user='c4rt1y', master_password='123123',master_log_file='mysql-bin.000003', master_log_pos=317;
#从新开始
slave start
#查看状态
show slave status\G;

#确认以下两项参数都为yes,则成功开启
Slave_IO_Running: Yes
Slave_SQL_Running: Yes


##在master上创建表
mysql -u root -p
use db1;
create table user(uname varchar(10),passwd varchar(20));


#node01上查看,该表已经存在
use db1;
show tables;

0x05 延迟主从复制

##在master上执行
stop slave stop ;
change master to master_delay = 600;
start slave;

使用延迟主从复制的作用
  1.防止误删除
  2.延迟测试
  3.历史查询

0x06 半复制

##master执行
mysql -u root -p
install plugin rpl_semi_sync_master soname 'semisync_master.so';
set global rpl_semi_sync_master_enabled = 1;
set global rpl_semi_sync_master_timeout = 1000;

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
set global rpl_semi_sync_slave_enabled = 1;

show global status like "rpl_sme%";

stop slave io _thread; start slave io_thread;

create databases hehe;

show databases;


#主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。

0x07 资料来源

老男孩12期
GoTop