安装跟卸载

Mysql安装

下载Mysql源安装包

1   wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

yum安装mysql源

2   yum localinstall mysql57-community-release-el7-8.noarch.rpm -y

检查mysql源是否安装成功

3   yum repolist enabled | grep "mysql.*-community.*"

yum安装Mysql

4   yum install mysql-community-server -y

启动Mysql服务

5   systemctl start mysqld

并添加开机启动

systemctl enable mysqld systemctl daemon-reload

查看Mysql状态

6   systemctl status mysqld

查看默认的mysql密码

此时Mysql安装完成!!!

接下来修改密码

查看默认的mysql密码

7   vi /var/log/mysqld.log

修改mysql的密码

登录mysql: mysql -uroot -p 回车

密码: =>g6hj.Nx4e (上面查看的原始密码)

8   set password for 'root'@'localhost'=password(soy@3975');

9   添加远程登陆的用户权限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Jamie@3975' WITH GRANT OPTION;

FLUSH PRIVILEGES;

10  修改mysql字符编码

vi /etc/my.cnf

添加

character_set_server=utf8

init_connect='SET NAMES utf8'

11  重启Mysql

systemctl stop mysqld

systemctl start mysqld

12  查看Mysql字符集

show variables like '%character%'

Mysql卸载

rpm -qa|grep -i mysql

yum remove mysql-community-server -y

rpm -ev mysql-community-libs-5.7.24-1.el7.x86_64 --nodeps

删除文件

find / -name mysql

rm -rf /var/lib/mysql

rm -rf /etc/my.cnf

Mysql docker安装

docker run --name mysql3307 -p 3307:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=enjoy -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/3307/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/3307/data/:/var/lib/mysql -v /home/mysql/docker-data/3307/logs/:/var/log/mysql -d mysql:5.7

为什么要做数据库扩展

数据库扩展解决了什么问题?

热备份,多活,故障切换

负载均衡、读写分离

Replication常用架构

常规复制架构(Master --- Slaves)

在实际应用场景中,MySQL 复制 90% 以上都是一个 Master 复制到一个或者多个Slave 的架构模式

缺点:

1、master不能停机,停机就不能接收写请求

2、slave过多会出现延迟

由于master需要进行常规维护停机了,那么必须要把一个slave提成master,选哪一个是一个问题?

某一个slave提成master了,就存在当前master和之前的master数据不一致的情况,并且之前master并没有保存当前

master节点的binlog文件和pos位置。

Dual Master 复制架构(Master --- Master) Master)

可以配合一个第三方的工具,比如keepalived轻松做到IP的漂移,停机维护也不会影响写操作。

级联复制架构(Master --- Slaves --- Slaves ...) ...)

如果读压力加大,就需要更多的slave来解决,但是如果slave的复制全部从master复制,势必会加大master的复制IO的压力,所以就出现了级联复制,减轻master压力。

缺点:

slave延迟更加大了

Dual Master 与级联复制结合架构(Master - Master - Slaves)

这样解决了单点master的问题,解决了slave级联延迟的问题.

Replication机制的实现原理

mysql数据热备份

1、进入mysql查看数据库

mysql -uroot -p123456;

show databases;

2、备份相应数据库

mysqldump -uroot -p123456 --databases consult mall > back.sql

这里需要注意,如果是热备份,这里需要在dump数据之前进行锁表操作,避免dump数据的时候出现插入操作导致数据不一致的情况。

3、master锁表

锁表:flush table with read lock;

4、slave导入数据

mysql -uroot -p123456 < back.sql

5、master解锁

解锁:unlock tables;

Mysql主从复制

master配置

server-id=135

#开启复制功能

log-bin=mysql-bin

auto_increment_increment=2

auto_increment_offset=1

lower_case_table_names=1

#binlog-do-db=mstest      //要同步的mstest数据库,要同步多个数据库

#binlog-ignore-db=mysql  //要忽略的数据库

slave配置

server-id=133

log-bin=mysql-bin

auto-increment-increment=2

auto-increment-offset=2

lower_case_table_names=1

#replicate-do-db  = wang                 #需要同步的数据库

#binlog-ignore-db  = mysql

#binlog-ignore-db  = information_schema

1   在master mysql添加权限

GRANT REPLICATION SLAVE,FILE,REPLICATION CLIENT ON *.* TO 'repluser'@'%' IDENTIFIED BY '123456';

FLUSH PRIVILEGES;

2   在master上查看master的二进制日志

show  master status;

3   在slave中设置master的信息

change master to master_host='192.168.88.135',master_port=3307,master_user='repluser',master_password='Jack@123456',master_log_file='mysql-bin.000001',master_log_pos=154;

4   开启slave,启动SQL和IO线程

start slave;

5   查看slave的状态

show slave status\G

6  查看二进制日志是否开启

show global variables like "%log%";

7  查看进程信息

SHOW PROCESSLIST;

8  允许root远程连接

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Mysql主从半同步复制

加载lib,所有主从节点都要配置

主库:install plugin rpl_semi_sync_master soname 'semisync_master.so';

从库:install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

可以一起装。建议一起装,因为会有主从切换的情景。

查看,确保所有节点都成功加载。

show plugins;

启用半同步

先启用从库上的参数,最后启用主库的参数。

从库:set global rpl_semi_sync_slave_enabled = {0|1};   # 1:启用,0:禁止

主库:

set global rpl_semi_sync_master_enabled = {0|1};   # 1:启用,0:禁止

set global rpl_semi_sync_master_timeout = 10000;       # 单位为ms

风险:endbled写入配置文件的话,会使实例启动后立即进入半同步模式,如果发生长时间断连的实例重新运行启动,有可能导致主库被拖垮。

建议:长时间断开的从库,重新连接后,要等待追完全部事务后,手动开启半同步模式,而不是启动后直接切换,防止冲击主库。

master的my.cnf配置

[mysqld]

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

slave的my.cnf配置

[mysqld]

rpl_semi_sync_slave_enabled=1

从库重启io_thread

stop slave io_thread;

start slave io_thread;

查询主库状态信息

show global status like "%sync%";

重要参数

Rpl_semi_sync_master_clients         支持和注册半同步复制的已连Slave数

Rpl_semi_sync_master_no_times     master关闭半同步复制的次数

Rpl_semi_sync_master_no_tx           master没有收到slave的回复而提交的次数,可以理解为master等待超时的次数,即半同步模式不成功提交数量

Rpl_semi_sync_master_status          ON是活动状态(半同步),OFF是非活动状态(异步),用于表示主服务器使用的是异步复制模式,还是半同步复制模式

Rpl_semi_sync_master_tx_avg_wait_time      master花在每个事务上的平均等待时间

Rpl_semi_sync_master_tx_waits         master等待成功的次数,即master没有等待超时的次数,也就是成功提交的次数

Rpl_semi_sync_master_yes_tx          master成功接收到slave的回复的次数,即半同步模式成功提交数量。

查询主库参数信息

show global variables like '%sync%';

重要参数

rpl_semi_sync_master_enabled        (主库)是否启动半同步

rpl_semi_sync_master_timeout           等待多时毫秒后变成异步复制,默认是10000ms

rpl_semi_sync_master_wait_point        5.7默认AFTER_SYNC(增强版半同步复制,无损复制模式),在得到slave的应答后再commit,可选值AFTER_COMMIT,在master提交后同步数据给slave,然后master等待slave应答,应答成功返回客户端。

after_commit缺点

缺点1: 幻读

当用户发起一个事务,该事务已经写入redo日志和binlog日志,但该事务还没写入从库,此时处在waiting slave dump处,此时另一个用户可以读取到这条数据,而他自己却不能;

缺点2:数据丢失

一个事务在waiting slave dump处crash后,主库将比从库多一条数据

mysql官网配置信息详解

https://dev.mysql.com/doc/refman/5.6/en/replication-options-reference.html

Mysql高可用

haproxy安装

找到haproxy的包

wget http://pkgs.fedoraproject.org/repo/pkgs/haproxy/haproxy-1.7.9.tar.gz

解压

tar zxf haproxy-1.7.9.tar.gz

编译安装

cd haproxy-1.7.9

make TARGET=linux310 ARCH=x86_64   (查看自己系统是什么    uname -r)

make install SBINDIR=/usr/sbin/ MANDIR=/usr/share/man/ DOCDIR=/usr/share/doc/

配置haproxy

新建目录和用户

mkdir /etc/haproxy

mkdir /var/lib/haproxy

useradd -r haproxy

编辑配置文件

vi /etc/haproxy/haproxy.cfg

配置日志

vim /etc/rsyslog.conf

# Provides TCP syslog reception #去掉下面两行注释,开启TCP监听

$ModLoad imudp

$UDPServerRun 514

local2.*             /var/log/haproxy.log      #添加日志

vi /etc/sysconfig/rsyslog

SYSLOGD_OPTIONS=""

改为 SYSLOGD_OPTIONS="-r -m 2 -c 2"

创建日志文件

touch /var/log/haproxy.log

启动日志

systemctl restart  rsyslog.service

启动haproxy  cd /usr/sbin/haproxy

./haproxy -f /etc/haproxy/haproxy.cfg

在两台数据库添加远程访问权限

GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'Jack@123456';

FLUSH PRIVILEGES;

测试haproxy服务器能否连接到数据库服务器

安装mysql客户端

yum install -y mysql

mysql -uroot -pJack@123456 -h 192.168.88.135

mysql -uroot -pJack@123456 -h 192.168.88.133

在非haproxy服务器测试通过访问haproxy访问到mysql服务

mysql -uroot -pJack@123456 -h 192.168.88.132 -P 3300

访问页面   http://192.168.88.132:1080/stats

keepalived安装

源码安装

wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz

tar -zxvf keepalived-1.3.5.tar.gz

安装openssl openssl-devel

yum -y install openssl openssl-devel

./configure --prefix=/usr/local/keepalived  --sbindir=/usr/sbin/ --sysconfdir=/etc/ --                                mandir=/usr/local/share/man/

make && make install

修改配置

vi /etc/keepalived/keepalived.conf

给执行权限

# chmod +x /etc/keepalived/chk.sh

创建检查haproxy脚本

Yum安装

keepalived yum安装

预先安装好epel-release源

yum list installed|grep epel-release

查找可用安装的keepalived源

yum search keepalived

命令进行安装

yum install keepalived -y

启动keepalived服务

systemctl start keepalived

使用yum安装的会有一个默认配置文件模板

路径为/etc/keepalived/keepalived.conf

yum install ipvsadm -y

mysql -h 192.168.67.140 -u root -p123456 -P 3307 -e "show status;" >/dev/null 2>&1

>/dev/null 2>&1  输出”黑洞”

$? 上一个指令是否执行成功

0 成功  1 失败

何为数据切分

简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。

数据切分分为两种:

垂直切分

水平切分

垂直切分:

垂直切分的优点

◆ 数据库的拆分简单明了,拆分规则明确;

◆ 应用程序模块清晰明确,整合容易;

◆ 数据维护方便易行,容易定位;

垂直切分的缺点

◆ 部分表关联无法在数据库级别完成,需要在程序中完成,存在跨库join的问题,对于这类的表,就需要去做平衡,是数据库让步业务,共用一个数据源,还是分成多个库,业务之间通过接口来做调用;在系统初期,数据量比较少,或者资源有限的情况下,会选择共用数据源,但是当数据发展到了一定的规模,负载很大的情况,就需要必须去做分割。

◆ 对于访问极其频繁且数据量超大的表仍然存在性能瓶颈,不一定能满足要求;

◆ 事务处理相对更为复杂;

◆ 切分达到一定程度之后,扩展性会遇到限制;

◆ 过多切分可能会带来系统过渡复杂而难以维护。

水平切分:

相对于垂直拆分,水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中.

水平切分的优点

◆ 表关联基本能够在数据库端全部完成;

◆ 不会存在某些超大型数据量和高负载的表遇到瓶颈的问题;

◆ 应用程序端整体架构改动相对较少;

◆ 事务处理相对简单;

◆ 只要切分规则能够定义好,基本上较难遇到扩展性限制;

水平切分的缺点

切分规则相对更为复杂,很难抽象出一个能够满足整个数据库的切分规则;

后期数据的维护难度有所增加,人为手工定位数据更困难;

应用系统各模块耦合度较高,可能会对后面数据的迁移拆分造成一定的困难。

跨节点合并排序分页问题

多数据源管理问题

几种典型的分片规则

1、按照用户ID求模,将数据分散到不同的数据库,具有相同数据用户的数据都被分散到一个库中。

2、按照日期,将不同月甚至日的数据分散到不同的库中。

3、按照某个特定的字段求摸,或者根据特定范围段分散到不同的库中。

由于数据切分后数据Join的难度在此也分享一下数据切分的经验

第一原则:能不切分尽量不要切分。

第二原则:如果要切分一定要选择合适的切分规则,提前规划好。

第三原则:数据切分尽量通过数据冗余或表分组(Table Group)来降低跨库Join的可能。

第四原则:由于数据库中间件对数据Join实现的优劣难以把握,而且实现高性能难度极大,业务读取尽量少使用多表Join。

综上描述,数据切分带来的核心问题主要有三个:

◆ 引入分布式事务的问题;

◆ 跨节点 Join 的问题;

◆ 跨节点合并排序分页问题;

Mysql数据库扩展的更多相关文章

  1. (独孤九剑)---PHP操作MySQL数据库

    [一]开启mysql扩展 在PHP操作MySQL数据库之前,要保证开启了MySQL数据库扩展 若未开启,则可以将php.int文件下的php_mysql开启即可,方式为去掉前面的封号; 配置完成后要重 ...

  2. php笔记08:数据库编程---使用php的MySQL扩展库操作MySQL数据库

    1.使用php的MySQL扩展库操作MySQL数据库: php有3种方式操作MySQL数据库 (1)mysql扩展库 (2)mysqli扩展库 (3)pdo     mysql扩展库与mysql数据库 ...

  3. mysqli扩展库操作mysql数据库

    配置环境 配置php.ini文件让php支持mysqli扩展库 extension=php_mysqli.dll 建库建表 详见博客 “mysql扩展库操作mysql数据库” 查询数据库 <?p ...

  4. PHP使用mysqli扩展连接MySQL数据库

    这篇文章主要介绍了PHP使用mysqli扩展连接MySQL数据库,需要的朋友可以参考下 1.面向对象的使用方式 $db = new mysqli('localhost', 'root', '12345 ...

  5. 使用php的mysqli扩展库操作mysql数据库

    简单介绍mysqli: 1.mysqli(mysql improve mysql扩展库的增强版) mysql扩展库和mysqli扩展库的区别 1.mysqli的稳定性  安全性 和 执行效率有所提高 ...

  6. PHP mysql 扩展库 操作mysql数据库步骤

    一.mysql 扩展库操作mysql数据库步骤如下: 1.获取连接 2.选择数据库 3.设置操作编码 4.发送指令(ddl数据定义/dml数据操作/dql数据查询/dtl数据事务控制) 5.接收返回的 ...

  7. Flask 操作Mysql数据库 - flask-sqlalchemy扩展

    数据库的设置 Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的.它使用结构化的查询语言.关系型数据库的列定义了表中 ...

  8. MySQL数据库单例连接简单实现(MySQL扩展)

    <?php /** * MySQL数据库单例实现 * * @author shizq at 2015-04-22 * */ final class MySQLFactory { private ...

  9. php中使用mysqli和pdo扩展,测试连接mysql数据库的效率。

    <?php /** * 测试pdo和mysqli的连接效率,各连接100次mysql数据库 */ header("Content-type:text/html;charset=utf8 ...

随机推荐

  1. ZooKeeper Watcher 机制

    前言 在 ZooKeeper 中,客户端可以向服务端注册一个监听器,监听某个节点或者其子节点列表,当监听对象发生变化时,服务端就会向指定的客户端发送通知,这是 ZooKeeper 中的 Watcher ...

  2. Jenkins持续集成(下)-Jenkins部署Asp.Net网站自动发布

    环境:Windows 2008 R2.Jenkins2.235.1.Visual Studio 2017: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成S ...

  3. Eclipse的Servers中无法添加Tomcat6/7

    2017年03月06日 17:14:46 阅读数:1007 Eclipse中在添加tomcat时发现6和7点击后发现ServerName是灰色的不能使用,也点不了NEXT,在各种查百度后发现需要删除w ...

  4. AS在安装GitHub时出现错误:Empty git --version output:

    AS在安装GitHub时出现错误: 原因:在选择git.exe时选择错误. 解决方法: 选择如下Git下cmd或者bin中的git.exe文件:

  5. UML活动图(二)

    转载于https://www.cnblogs.com/xiaolongbao-lzh/p/4591953.html 活动图概述 •活动图和交互图是UML中对系统动态方面建模的两种主要形式 •交互图强调 ...

  6. 为什么LinkedList不建议使用for循环遍历,而使用iterator方式进行遍历,但ArrayList建议使用for循环进行遍历呢?

    如果使用for循环方式遍历链表,由于链表中元素是通过指针连接彼此的,不存在索引的概念,如果使用for循环方式遍历LinkedList,依次传入索引值,则就相当于每次都要将链表撸一遍. 如:在下面的这个 ...

  7. SpringBoot--- SpringSecurity进行注销,权限控制

    SpringBoot--- SpringSecurity进行注销,权限控制 环境 IDEA :2020.1 Maven:3.5.6 SpringBoot: 2.0.9 (与此前整合的版本2.3.3 不 ...

  8. Magento1.9 add attribute to catalog product & assign to all attribute set general group

    $installer = $this; $attributes = array( 'region' => array( 'type' => 'int', 'input' => 'se ...

  9. 操作系统-PV习题

    (1)阅览室问题:加入阅览室入口有一本登记册,每个人都必须按顺序签名进去. 想法:登记册可以用结构数组A[]表示,包含name和number.此外,还需要信号量seatcount表示剩余座位数. 使用 ...

  10. 2020.5.26 第六篇 Scrum冲刺博客

    Team:银河超级无敌舰队 Project:招新通 项目冲刺集合贴:链接 目录 一.每日站立会议 1.1 会议照片 1.2 项目完成情况 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3. ...