linux笔记

主从复制
主:
create database HA;
vim /etc/my.cnf
添加
log-bin=mysql-bin-master
server-id=1
binlog-do-db=HA
binlog-ignore-db=mysql
重启数据库
systemctl restart mysql
创建同步用户给用户授权
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
flush privileges;
show master status;
导出数据库文件
mysqldump -uroot -p1 HA >HA.sql
将数据库文件传输给从机
scp HA.sql root@10.0.0.15:/root
从:
vim /etc/my.cnf
log-bin=mysql-bin-master
server-id=2
binlog-do-db=HA
binlog-ignore-db=mysql
vim /usr/local/mysql/data/auto.cnf
重启mysql
systemctl restart mysql
mysql -uroot -p1
stop slave
change master to master_host='10.0.0.3',master_user='slave',master_password='1',master_port=3306,master_,master_log_file='binlog.000010',master_log_pos=807;
start slave;
show salve status\G


读写分离
1.前提做好主从复制
2.在主机上安装mycat
3.上传mycat安装包和jdk安装包
4.安装jdk
    1、传到安装包/usr/local下
    2、解压缩tar xf jdk....
    3、重命名 mv jdk...  jdk8
    4、配置环境变量
    vim /etc/profile
    JAVA_HOME=/usr/local/jdk8
    PATH=$PATH:$JAVA_HOME/bin
    export PATH
    5、生效    
    soure  /etc/profile
    6、检查
    java -version
5.安装mycat
    1、传到/usr/local
    2、解压缩 tar  xvf 
6.修改配置文件
server.xml
    <user name="root" defaultAccount="true">  
                <property name="password">123456</property>  
                <property name="schemas">同步数据库名称</property>   
                <property name="defaultScheddma">同步数据库名称</property>
        </user>
        <user name="user">
                <property name="password">user</property>
                <property name="schemas">同步数据库名称</property>
                <property name="readOnly">true</property>
                <property name="defaultSchema">同步数据库名称</property>
        </user>
schema.xml
    替换整个文件
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="数据库名" checkSQLschema="true" sqlMaxLimit="100"  dataNode='dn1'>
        </schema>
        <dataNode name="dn1" dataHost="host1" database="数据库名" />
        <dataHost name="host1" maxCon="1000" minCon="10" balance="3"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="主机IP:3306" user="root"  
                                   password="123456">
                        <readHost host="hostS1" url="从机IP:3306" user="root" password="123456" />
                </writeHost>
        </dataHost>
</mycat:schema>
log4j2.xml
    <asyncRoot level="debug" includeLocation="true">
    <AppenderRef ref="Console"/>
7.如果是mysql8,修改ajr包
    1、把mysql8驱动jar包放到mysql/lib下
    2、把原来mysql-connector-5.1.35.jar改为mysql-connentor-5.1.35.jar.bak
    3、给mysql8的jar执行权限
    chmod +x mysql-connection-8.1.12.jar
8.配置mycat的环境变量
    vim /etc/profile
    添加
    MYCAT_HOME=/usr/local/mycat
    生效
    source /etc/profile
9.在主从mysql中创建用户授权
    create user 'root'@'%' identified with mysql_native_password by '1';
    grant all on *.* to 'root'@'%';
    flush privileges;
10.启动mycat
    在mycat/bin
    ./mycat start\stop\restart\console
11.修改mycat所在主机的my.cnf
    [mysqld]
    sql_mode=""
    default_authentication_plugin=mysql_native_password
重启mysql
12.测试
    登录mycat
    mysql -uroot -p1 -P8066 -h10.0.0.4 --default_auth=mysql_native_password
    进入数据库执行增删改查
    看mycat控制台查看sql路由
MHA
1.准备四台,其中三台是mysql服务器,一主二从,一台管理器
2.实现四台服务器的免密登录
    ssh-keygen -t rsa 生成密钥
    ssh-copy-id 服务器id 发送公钥到其他三台机器
3.所有机器安装依赖
    yum -y install epel-release
    yum -y install perl-DBD-MySQL perl-Config-Tiny
    perl-Log-Dispatch perl-Parallel-Forkmanager --skip-broken
4.所有机器都安装mha-node
    上传mha-node-xx.rpm文件
    执行安装命令
    rpm -ivh mha-node-xxx.rpm
5.登录三台mysql,创建复制用户
    mysql -uroot -p1
    create user 'slave'@'%' identified with mysql_native_password by '1';
    grant replication slave on *.* to 'slave'@'%';
    flush privileges;
6.两个从机需要设置只读、清理relay_log
    mysql -uroot -p1 -e 'set global read_only =1'
    mysql -uroot -p1 -e 'set global read_only=0'
7.要保证所有mysql服务器上
    server-id  不相同
    binlog-do-db
    binlog-ignore-db 这两必须相同
8.在管理器服务器安装manager
    安装依赖
    yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-    Time-HiRes perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN -y
    安装manager
    rpm -ivh mha4mysql-manager-0.57-0.el7.noarch.rpm 
9.在管理器上创建目录
    mkdir -p /etc/masterha
    mkdir -p /var/log/masterha/app1
10.创建配置文件
    vim /etc/masterha/app1.cnf
    # 修改app1.cnf配置文件,修改后的文件内容如下(注意,配置文件中的注释需要去掉)
    [server default]
    manager_workdir=/var/log/masterha/app1           
    manager_log=/var/log/masterha/app1/manager.log   
    master_binlog_dir=/use/local/mysql/data      
    master_ip_failover_script= /usr/local/bin/master_ip_failover   #自动切换脚本 
    master_ip_online_change_script= /usr/local/bin/master_ip_online_change 
    password=123456         #设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
    user=root               #设置监控用户root
    ping_interval=1         
    remote_workdir=/tmp     #设置远端mysql在发生切换时binlog的保存位置
    repl_password=123456    #设置复制用户的密码
    repl_user=slave          #设置复制环境中的复制用户名
    report_script=/usr/local/send_report    #设置发生切换后发送的报警的脚本
    shutdown_script=""      #设置故障发生后关闭故障主机脚本
    ssh_user=root           #设置ssh的登录用户名

    [server1]
    hostname=主机IP
    port=3306

    [server2]
    hostname=从机(主机备胎)
    port=3306
    candidate_master=1   
    check_repl_delay=0   

    [server3]
    hostname=从机
    port=3306
11.创建自动切换脚本
    vim /usr/local/bin/master_ip_failover
    修改网段 $vip = '10.0.0.0/24';
    修改网卡名 ens33
    加执行权限
chmod +x /usr/local/bin/master_ip_failover

#!/usr/bin/env perl

use strict;
use warnings FATAL => 'all';

use Getopt::Long;
use MHA::DBHelper;

my (
  $command,        $ssh_user,         $orig_master_host,
  $orig_master_ip, $orig_master_port, $new_master_host,
  $new_master_ip,  $new_master_port,  $new_master_user,
  $new_master_password
);
my $vip = '192.168.101.100/24';
my $key = "1";
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";

GetOptions(
  'command=s'             => \$command,
  'ssh_user=s'            => \$ssh_user,
  'orig_master_host=s'    => \$orig_master_host,
  'orig_master_ip=s'      => \$orig_master_ip,
  'orig_master_port=i'    => \$orig_master_port,
  'new_master_host=s'     => \$new_master_host,
  'new_master_ip=s'       => \$new_master_ip,
  'new_master_port=i'     => \$new_master_port,
  'new_master_user=s'     => \$new_master_user,
  'new_master_password=s' => \$new_master_password,
);

exit &main();

sub main {
  if ( $command eq "stop" || $command eq "stopssh" ) {

    # $orig_master_host, $orig_master_ip, $orig_master_port are passed.
    # If you manage master ip address at global catalog database,
    # invalidate orig_master_ip here.
    my $exit_code = 1;
    eval {

      # updating global catalog, etc
      $exit_code = 0;
    };
    if ($@) {
      warn "Got Error: $@\n";
      exit $exit_code;
    }
    exit $exit_code;
  }
    elsif ( $command eq "start" ) {

        # all arguments are passed.
        # If you manage master ip address at global catalog database,
        # activate new_master_ip here.
        # You can also grant write access (create user, set read_only=0, etc) here.
        my $exit_code = 10;
        eval {
            print "Enabling the VIP - $vip on the new master - $new_master_host \n";
            &start_vip();
            &stop_vip();
            $exit_code = 0;
        };
        if ($@) {
            warn $@;
            exit $exit_code;
        }
        exit $exit_code;
    }
    elsif ( $command eq "status" ) {
        print "Checking the Status of the script.. OK \n";
        `ssh $ssh_user\@$orig_master_host \" $ssh_start_vip \"`;
        exit 0;
    }
    else {
        &usage();
        exit 1;
    }
}

sub start_vip() {
    `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
# A simple system call that disable the VIP on the old_master 
sub stop_vip() {
   `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}

sub usage {
  print
"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}


grep
基本语法:grep '查找内容' 文件路径
-m n                    表示匹配前n次后停止匹配
-B n                表示过滤的信息和过滤信息前n行信息一起过滤输出
-A n             表示过滤的信息和过滤信息后n行信息一起过滤输出
-C n             表示过滤的信息和过滤信息前后n行信息一起过滤输出
-i                表示忽略过滤信息的大小写
-o                表示只显示匹配到内容
-n                表示过滤信息显示输出行号
-c                      小写字母c表示统计过滤信息的次数
-v                 表示对过滤信息进行取反显示
-e                 表示多个条件过滤文件
-E                等价于egrep命令,识别扩展正则表达式
-q                 静默模式,不输出任何信息(可以通过echo ?判断是否匹配到)
-w                 匹配整个单词,相当于\<xxxxx\>
-F                 不支持正则表达式,相当于fgrep
-f file             把过滤条件写入文件中,文件中不需要写引号
-r                 递归目录,但不处理软链接文件
-R                 递归目录,但处理软链接文件

正则表达式    元字符
.                      匹配任意单个字符
\w            任意    字母数字或下划线
[]            匹配指定范围内的任意单个字符
[a-zA-Z]        匹配大小写字母
[^]            取反
[0-9]        匹配0到9之间的数字
[a-z]            匹配a-z小写字母
[A-Z]        匹配A-Z小写字母
[abc]        匹配列表中的任何一个字符
[^demo]        匹配列表中的所有字符以外的字符
[[:digit:]]        匹配任意数字
[[:lower:]]    匹配任意小写字母
[[:upper:]]    匹配任意大写字母
[[:alpha:]]    匹配任意大小写字母
[[:alnum:]]    匹配任意数字或字母
[[:blank:]]    匹配水平空白字符
[[:space:]]    匹配水平或垂直空白字符
[[:punct:]]    匹配标点符号
[[:print:]]        匹配可打印字符
[[:cntrl:]]        匹配控制(非打印)字符
[[:graph:]]    匹配图形字符
[[:xdigit:]]    匹配十六进制字符

次数匹配
*               匹配前面的字符任意次
.*        任意长度的任意字符
\?        匹配其前面的字符出现0次或1次
\+        匹配匹配其前面的字符出现至少1次
\{n\}        匹配前面的字符n次
\{m,n}    匹配前面的字符至少m次,至少n次
\{,n}        匹配前面的字符至多n次
\{n,}        匹配前面的字符至少n次


sed
-n:关闭sed默认输出功能,只输出script处理过的信息
-e:指定多个script指令,多点匹配
-f:从指定文件读取script指令
-r:识别扩展正则表达式
-i:sed默认处理数据不影响文件原内容
指令
p:输出script处理的数据行
ip:|参数忽略过滤信息大小写
d:删除模式匹配的行
a\:模式匹配的行后面追加内容信息,并处理下一行
i\:模式匹配的行前面追加内容信息,并处理下一行
c\:替换指定整行信息
w file:保存模式匹配的行至指定文件
r file:读取指定文件的文本至模式空间中匹配到的行后
=显示匹配到信息所在行号
!取反
;同参数-e

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值