月度归档:2018年09月

MySQL8 主主复制 主从备份

MYSQL 开启 主主复制 (A1+A2 主从复制+ A2+A1主从辅助=A1A2主主复制)

A1
ip 192.168.0.202
server-id=4
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=1
A2
ip 192.168.191
server-id=7
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2

注意ip地址不要写错 用户名和密码不要写错 log pos 不要写错 否则将导致无法同步成功

A1

CREATE USER ‘MySQL7’@’192.168.0.191’ IDENTIFIED BY ‘&P01l*D7’;#创建用户
GRANT REPLICATION SLAVE ON *.* TO ‘MySQL7’@’192.168.0.191′;#授权
flush privileges;

CHANGE MASTER TO

MASTER_HOST=’192.168.0.191′,

MASTER_USER=’MySQL4′,

MASTER_PASSWORD=’&P01l*D7′,

MASTER_LOG_FILE=’mysql-bin.000002’,

MASTER_LOG_POS=1910;
A2

CREATE USER ‘MySQL4’@’192.168.0.202’ IDENTIFIED BY ‘&P01l*D7’;#创建用户
GRANT REPLICATION SLAVE ON *.* TO ‘MySQL4’@’192.168.0.202′;#授权
flush privileges;

CHANGE MASTER TO

MASTER_HOST=’192.168.0.202′,

MASTER_USER=’MySQL7′,

MASTER_PASSWORD=’&P01l*D7′,

MASTER_LOG_FILE=’mysql-bin.000002’,

MASTER_LOG_POS=1448;

分别开启
start slave;

#查看主从复制是否配置成功

SHOW SLAVE STATUS\G

删除所有同步

stop slave;
reset slave;

 

 

参考文档  https://www.cnblogs.com/phpstudy2015-6/p/6485819.html

 

1、简介

MySQL作为世界上使用最为广泛的数据库之一,免费是其原因之一。但不可忽略的是它本身的功能的确很强大。随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。此时数据库集群就很好的解决了这个问题了。采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器(这篇博客暂时不涉及)。在此之前我们必须要保证每台MySQL服务器里的数据同步。数据同步我们可以通过MySQL内部配置就可以轻松完成,主要有主从复制和主主复制。2、环境说明

两台linux虚拟主机

Linux版本CentOS6.6、MySQL 5.5

ip:192.168.95.11、192.168.95.12

3、主从复制

     3.1、MySQL

已经安装好,并且没有任何数据

     3.2、配置文件

一般Linux中的MySQL配置文件都在/etc/my.cnf(windows中的配置文件为mysql.ini)

log-bin=mysql-bin 开启二进制日志

注意:二进制日志必须开启,因为数据的同步实质上就是其他的MySQL数据库服务器将这个数据变更的二进制日志在本机上再执行一遍。

192.168.95.11  为主数据库服务器

192.168.95.12  为从数据库服务器

    3.3、开始构建主从复制

第一步:

在192.168.95.11中创建一个192.168.95.12主机中可以登录的MySQL用户

用户:mysql12

密码:mysql12

mysql>GRANT REPLICATION SLAVE ON *.* TO ‘mysql12’@’192.168.95.12’ IDENTIFIED BY ‘mysql12’;

mysql>FLUSH PRIVILEGES;

第二步:

查看192.168.95.11MySQL服务器二进制文件名与位置

mysql>SHOW MASTER STATUS;

第三步:

告知二进制文件名与位置

在192.168.95.12中执行:

mysql>CHANGE MASTER TO

>MASTER_HOST=’192.168.95.11’,

>MASTER_USER=’mysql12’,

>MASTER_PASSWORD=’mysql12’,

>MASTER_LOG_FILE=’mysql-bin.000048’,

>MASTER_LOG_POS=432;

完成主从复制配置

      3.4、测试主从复制

在192.168.95.12中

mysql>START SLAVE;   #开启复制

mysql>SHOW SLAVE STATUS\G   #查看主从复制是否配置成功

当看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明状态正常

实际测试:

–登陆192.168.95.11主MySQL

mysql>SHOW DATABASES;

–登陆192.168.95.12从MySQL

mysql>SHOW DATABASES;

—————————————————–

192.168.95.11主MySQL操作:

mysql>create database aa;

mysql>use aa;

mysql>create table tab1(id int auto_increment,name varchar(10),primary key(id));

mysql>show databases;

mysql>show tables;

192.168.95.12从MySQL操作:

mysql>show databases;

mysql>show tables;

由上面两个结果图可得知,两主机达到了数据同步。主从复制的配置就是如此的简单。

4、MySql主主复制

     4.1、实现原理

主主复制即在两台MySQL主机内都可以变更数据,而且另外一台主机也会做出相应的变更。聪明的你也许已经想到该怎么实现了。对,就是将两个主从复制有机合并起来就好了。只不过在配置的时候我们需要注意一些问题,例如,主键重复,server-id不能重复等等。

     4.2、配置文件

–192.168.95.11

server-id=11   #任意自然数n,只要保证两台MySQL主机不重复就可以了。

log-bin=mysql-bin   #开启二进制日志

auto_increment_increment=2   #步进值auto_imcrement。一般有n台主MySQL就填n

auto_increment_offset=1   #起始值。一般填第n台主MySQL。此时为第一台主MySQL

binlog-ignore=mysql   #忽略mysql库【我一般都不写】

binlog-ignore=information_schema   #忽略information_schema库【我一般都不写】

replicate-do-db=aa   #要同步的数据库,默认所有库

–192.168.95.12

server-id=12

log-bin=mysql-bin

auto_increment_increment=2

auto_increment_offset=2

replicate-do-db=aa

配置好后重启MySQL

    4.3、开始构建主主复制

因为主主复制是两个主从复制组合一起,所以我就接着上面主从复制接着配置。

第一步:

在192.168.95.12中创建一个192.168.95.11主机中可以登录的MySQL用户

用户:mysql11

密码:mysql11

mysql>GRANT REPLICATION SLAVE ON *.* TO ‘mysql11’@’192.168.95.11’ IDENTIFIED BY ‘mysql11’;

mysql>FLUSH PRIVILEGES;

第二步:

在192.168.95.12查看二进制日志名和位置

mysql>show master status;

第三步:

告知二进制文件名与位置

在192.168.95.11中执行:

mysql>CHANGE MASTER TO

MASTER_HOST=’192.168.95.12’,

MASTER_USER=’mysql11’,

MASTER_PASSWORD=’mysql11’,

MASTER_LOG_FILE=’mysql-bin.000084’,

MASTER_LOG_POS=107;

完成主主复制配置

    4.4、测试主主复制

分别开启start slave;

mysql>SHOW SLAVE STATUS\G   #查看主从复制是否配置成功

192.168.95.11

192.168.95.12

 

 

当看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明状态正常

测试:

–192.168.95.11

mysql>use aa;

mysql>select*from tab1;

tab1无数据

–192.168.95.12

mysql>use aa;

mysql>select*from tab1;

tab1无数据

–192.168.95.11插入数据

mysql>insert into tab1 (name) value(‘11’),(‘11’),(‘11’);

–192.168.95.12插入数据

mysql>insert into tab1 (name) value(‘22’),(‘22’),(‘22’);

查看数据:

两个主机数据结果一样!

主主复制配置成功!

5、注意事项

1、主主复制配置文件中auto_increment_increment和auto_increment_offset只能保证主键不重复,却不能保证主键有序。

2、当配置完成Slave_IO_Running、Slave_SQL_Running不全为YES时,show slave status\G信息中有错误提示,可根据错误提示进行更正。

3、Slave_IO_Running、Slave_SQL_Running不全为YES时,大多数问题都是数据不统一导致。

常见出错点:

1、两台数据库都存在db数据库,而第一台MySQL db中有tab1,第二台MySQL db中没有tab1,那肯定不能成功。

2、已经获取了数据的二进制日志名和位置,又进行了数据操作,导致POS发生变更。在配置CHANGE MASTER时还是用到之前的POS。

3、stop slave后,数据变更,再start slave。出错。

终极更正法:重新执行一遍CHANGE MASTER就好了。

CentOS7.5 安装MySql 8

CentOS7.5 安装MySql 8

找到yum的资源地址

https://dev.mysql.com/downloads/repo/yum/

找到最新的下载链接 点击 downloads
会提示请登陆 下方有一个不登陆直接下载链接 右键复制链接

https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

进入linux
执行命令
wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

安装rpm资源并更新yum缓存 文件根据你下载的文件名修改
rpm -ivh mysql80-community-release-el7-1.noarch.rpm

清空yum缓存然后创建新yum缓存
yum clean all && yum makecache

开始安装社区版 记得输入y

yum install mysql-community-server

开启 mysql 服务

systemctl start mysqld.service

查看自动生成的密码

cat /var/log/mysqld.log | grep root@localhost:

最后的 一段字符穿即为密码 包含特殊符号无空格

使用初始密码登陆

mysql -uroot -p
输入初始密码

修改初始密码 不修改无法进行其他操作

如果你需要外网访问数据库 将下面代码中的 localhost 替换成 百分号 % 密码 大小写加特殊符号可自定义 MyNewPass4!

ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘MyNewPass4!’;

quit 退出mysql

将Mysql 加入 自动启动 跟随系统启动时自启

systemctl enable mysqld.service

重启mysql 服务

systemctl restart mysqld.service

CentOS7.5 安装最新 Nginx版本 + PHP

2018年9月28日

当前最新版本是

下载Nginx 版本为1.15.4

新版本出现后你也可以下载更新版本 需要替换下载链接

wget http://nginx.org/download/nginx-1.15.4.tar.gz

解压下载的文件

tar -xzf nginx-1.15.4.tar.gz

先安装Nginx依赖和编译依赖

yum -y install pcre pcre-devel openssl openssl-devel gcc gcc-c++ autoconf automake zlib-devel libxml2 libxml2-dev libxslt-devel gd-devel perl-devel perl-ExtUtils-Embed GeoIP GeoIP-devel GeoIP-data make GeoIP-devel GeoIP-update

cd nginx-1.15.4

初始化配置

请注意

–prefix=/www/server/nginx #配置安装目录

–user=www –group=www # 配置运行用户和组

可自行修改

并且请创建www用户和www组,并将www用户加入www组 否则你无法启动nginx

./configure –prefix=/www/server/nginx –user=www –group=www –with-http_ssl_module –with-http_realip_module –with-http_geoip_module –with-http_stub_status_module –with-http_sub_module –with-stream –with-stream=dynamic

make && make install

 

关于PHP安装请参考网上教程 和Nginx通信请参考 http://blog.yanlongli.com/2018/09/28/nginx%e9%80%9a%e8%bf%87socket%e8%bf%9e%e6%8e%a5php-fpm/

云服务器初始化磁盘并挂在Linux CentOS 7.5

1.初始化扩展磁盘(500G)并挂在到/www 目录

请确保你的磁盘没有数据并未做初始化,否则数据将丢失,如果你想要挂在磁盘 请直接使用 mount 命令

查询设备

fdisk -l

这里我们的 /dev/vdb 磁盘未做初始化操作

#进入fdisk模式

fdisk /dev/vdb

进入分区

n

分配主分区

p

磁盘柱开始 默认2048或其他 直接回车

2048

磁盘结束位置 默认最大值 回车即可 如果你想要分多个区请自行计算

选择磁盘分区编号1-4  输入 1 将影响 vdb1 或vdb2

1

写入分区配置

w

同步磁盘信息

partprobe

格式化新分区 vdb1  ,ext4是分区类型,请自行百度

mkfs -t ext4 /dev/vdb1

挂在磁盘到www目录

mkdir /www

mount /dev/vdb1 /www

设定自动挂载

vi /etc/fstab

插入

/dev/vdb1 /www ext4 defaults 0 0

Nginx通过socket连接php-fpm

当我们Nginx和PHP配置在同一台服务器时,推荐使用套接字 socket直接对接。开销小,适合大并发使用。

修改php-fpm配置文件 直接安装的可能在php-fpm.d/www.conf
#listen = 127.0.0.1:9000
listen = /dev/shm/php-cgi.sock

同时注意修改权限
如果你的nginx运行在www、nginx用户下则需要同步修改 否则将提示404 ,查看nginx日志可以大概是如下提示连接失败
# *43 connect() to unix:/dev/shm/php-cgi.sock failed (2: No such file or directory) 

user = www
group = www
listen.owner = www
listen.group = www

修改nginx配置文件server段的配置,将http的方式改为socket方式

location ~ .*\.(php|php5)?$  {
                #fastcgi_pass  127.0.0.1:9000;
                fastcgi_pass   unix:/dev/shm/php-cgi.sock;
                fastcgi_index index.php;
                include fastcgi.conf;
        }

多云服务器共享公网IP

最近公司在做一个政企项目,华为云提供了免费的服务器套餐。大题如下:

8个服务器

配置是4vCPU8G

2个全动态BGP公网IP

本来业务需要一个服务器就够了,不过既然是提供了也没有浪费之理由。

所以划分如下

1 负责负载均衡

2 备用负载均衡

3 应用服务

4 MYSQL

5 WEB服务

6 应用服务备用

7 MYSQL备用

8 Windows Server

除了8服务器外其他的都更换成了CentOS7.5

这里WEB服务器使用很少,作为管理员控制,所以没有做负载均衡。

应用服务器为负载均衡

数据库做了主从同步,防止数据损坏问题。因为应用是完整的产品,无法读写分离数据库,并没有做负载均衡。

入口服务器是1和2,用于服务的转发

这里因为只有2个公网ip,分配给1、2服务器。同时开启端口转发,也可以用Nginx做负载均衡代理,我这里先用防火墙的端口转发功能。

转发后外网便可同时访问8台服务器了。

常用正则表达式【持续更新】

验证数字的正则表达式集
验证数字:^[0-9]*$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$
验证m-n位的数字:^\d{m,n}$
验证零和非零开头的数字:^(0|[1-9][0-9]*)$
验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
验证有1-3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
验证非零的正整数:^\+?[1-9][0-9]*$
验证非零的负整数:^\-[1-9][0-9]*$
验证非负整数(正整数 + 0)  ^\d+$
验证非正整数(负整数 + 0)  ^((-\d+)|(0+))$
验证长度为3的字符:^.{3}$
验证由26个英文字母组成的字符串:^[A-Za-z]+$
验证由26个大写英文字母组成的字符串:^[A-Z]+$
验证由26个小写英文字母组成的字符串:^[a-z]+$
验证由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
验证由数字、26个英文字母或者下划线组成的字符串:^\w+$
验证用户密码:^[a-zA-Z]\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
验证是否含有 ^%&’,;=?$\” 等字符:[^%&’,;=?$\x22]+
验证汉字:^[\u4e00-\u9fa5],{0,}$
验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
验证电话号码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:–正确格式为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
验证身份证号(15位或18位数字):^\d{15}|\d{}18$
验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$    正确格式为:01、09和1、31。
整数:^-?\d+$
非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$
正浮点数   ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
负浮点数  ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数  ^(-?\d+)(\.\d+)?

CentOS 开启 端口转发

#防火墙版端口转发
##查看 端口转发列表
firewall-cmd –list-forward

## 开启端口转发
firewall-cmd –permanent –add-masquerade
##添加端口转发
firewall-cmd –add-forward-port=port=7301:proto=tcp:toaddr=192.168.0.198:toport=22
firewall-cmd –add-forward-port=port=7302:proto=tcp:toaddr=192.168.0.198:toport=1812

firewall-cmd –add-forward-port=port=7401:proto=tcp:toaddr=192.168.0.202:toport=22
firewall-cmd –add-forward-port=port=7402:proto=tcp:toaddr=192.168.0.202:toport=3306

firewall-cmd –add-forward-port=port=7501:proto=tcp:toaddr=192.168.0.96:toport=22
firewall-cmd –add-forward-port=port=80:proto=tcp:toaddr=192.168.0.96:toport=80
firewall-cmd –add-forward-port=port=443:proto=tcp:toaddr=192.168.0.96:toport=443

firewall-cmd –add-forward-port=port=7601:proto=tcp:toaddr=192.168.0.6:toport=22

firewall-cmd –add-forward-port=port=7701:proto=tcp:toaddr=192.168.0.191:toport=22

CentOS7使用firewalld打开关闭防火墙与端口

1、firewalld的基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用  : systemctl disable firewalld
开机启用  : systemctl enable firewalld
2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。

启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl –failed

3.配置firewalld-cmd

查看版本: firewall-cmd –version
查看帮助: firewall-cmd –help
显示状态: firewall-cmd –state
查看所有打开的端口: firewall-cmd –zone=public –list-ports
更新防火墙规则: firewall-cmd –reload
查看区域信息:  firewall-cmd –get-active-zones
查看指定接口所属区域: firewall-cmd –get-zone-of-interface=eth0
拒绝所有包:firewall-cmd –panic-on
取消拒绝状态: firewall-cmd –panic-off
查看是否拒绝: firewall-cmd –query-panic
那怎么开启一个端口呢
添加
firewall-cmd –zone=public –add-port=80/tcp –permanent    (–permanent永久生效,没有此参数重启后失效)
重新载入
firewall-cmd –reload
查看
firewall-cmd –zone= public –query-port=80/tcp
删除
firewall-cmd –zone= public –remove-port=80/tcp –permanent
作者 : 莫小安
本文转载自: https://www.cnblogs.com/moxiaoan/p/5683743.html