• 07linux基础服务-MySQL5.7搭建


    1、准备三台已经安装好MySQL5.7的服务器,IP分别为192.168.204.128,192.168.204.129,192.168.204.130 

    1.1解压     tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz       

    将解压的复制到   /usr/local/mysql 目录       cp -r mysql-5.7.22-linux-glibc2.12-x86_64   /usr/local/mysql

    1.2、添加系统mysql组和mysql用户 

    添加系统mysql组     groupadd mysql

    添加mysql用户 useradd -r -g mysql mysql (添加完成后可用id mysql查看)

    1.3、安装数据库

    切到mysql目录 cd /usr/local/mysql

    修改当前目录拥有者为mysql用户 chown -R mysql:mysql ./

    安装数据库 bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

     

    生成了临时密码

    (看到有的报这个错
    bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

    解决方法:yum install -y libaio  //安装后在初始化就OK了)

    执行以下命令创建RSA private key  (图在最后)

      bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data

    修改当前目录拥有者为mysql用户 chown -R mysql:mysql ./

    修改当前data目录拥有者为mysql用户 chown -R mysql:mysql data

    1.4、配置my.cnf

    vim /etc/my.cnf    (直接把下面内容复制上就行)

    [mysqld]
    character_set_server=utf8
    init_connect='SET NAMES utf8'
    basedir=/usr/local/mysql
    datadir=/usr/local/mysql/data
    socket=/tmp/mysql.sock
    #不区分大小写
    lower_case_table_names = 1
    #不开启sql严格模式
    sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    log-error=/var/log/mysqld.log
    pid-file=/usr/local/mysql/data/mysqld.pid
    添加开机启动     cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld

    修改   vim /etc/init.d/mysqld   

    添加路径 在46行   

    basedir=/usr/local/mysql
    datadir=/usr/local/mysql/data

    1.5、启动mysql   service mysqld start 

     加入开机起动    chkconfig --add mysqld  

    1.6、登录修改密码 mysql -uroot -p 上面初始化时的密码

    如果出现错误 需要添加软连接  ln -s /usr/local/mysql/bin/mysql /usr/bin

     

    第一件事先修改密码

    alter user 'root'@'localhost' identified by 'root';   
    flush privileges;    #刷新权限
    GRANT ALL PRIVILEGES ON *.* TO 'root1'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;   #授权新用户

     

    至此安装完毕。

    2、编辑三台主机的MySQL配置文件为   (日中三个配置文件处理server_id、 loose-group_replication_local_address两个参数不一样,其它全部一样

    [mysqld]
    character_set_server=utf8
    init_connect='SET NAMES utf8'
    basedir=/usr/local/mysql
    datadir=/usr/local/mysql/data
    socket=/tmp/mysql.sock
    pid-file=/usr/local/mysql/data/mysqld.pid

    server_id = 100    #服务ID

    gtid_mode = ON  #全集事物

    enforce_gtid_consistency = ON  #强制GTID的一致性
    master_info_repository = TABLE  #将master.info元数据保存在系统表中
    relay_log_info_repository = TABLE  #将relay.infp元数据保存在系统表中
    binlog_checksum = NONE  #禁用二进制日志事件校验
    log_slave_updates = ON  #级联复制
    log_bin = binlog  #开启二进制日志记录
    binlog_format= ROW  #以行的格式记录
    transaction_write_set_extraction = XXHASH64  #使用哈希算法将其编码为散列
    loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856'  #加入的组名
    loose-group_replication_start_on_boot = off  #不自动启用组复制集群
     loose-group_replication_local_address= '192.168.204.128:33061'  #以本机端口33061接受来自组中成药的传入连接
    loose-group_replication_group_seeds ='192.168.204.128:33061,192.168.204.135:33062,192.168.204.130:33063'  #组中成员访问表
    loose-group_replication_bootstrap_group = off  #不启用引导组

    sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    log-error=/var/log/mysqld.log
    pid-file=/usr/local/mysql/data/mysqld.pid

    重启mysql服务

    在node1(192.168.204.128)上配置:

    mysql> set SQL_LOG_BIN=0;    #停掉日志记录

    mysql> grant replication slave on *.* to repl@'10.10.10.%' identified by '123456';

    mysql> flush privileges;

    mysql> set SQL_LOG_BIN=1;   #开启日志记录

    mysql> change master to master_user='repl',master_password='123456'  for channel 'group_replication_recovery';   #构建group replication集群

    在MySQL服务器node1上安装group replication插件

    mysql> install PLUGIN group_replication SONAME 'group_replication.so';

    查看group replication组件

    mysql> show plugins;

     

    启动服务器xuegod68.cn上MySQL的group replication

    设置group_replication_bootstrap_group为ON是为了标示以后加入集群的服务器以这台服务器为基准,以后加入的就不需要设置。

    mysql> set global group_replication_bootstrap_group=ON;

    作为首个节点启动mgr集群

    mysql> start group_replication;

    mysql> set global group_replication_bootstrap_group=OFF;

    查看mgr的状态

    查询表performance_schema.replication_group_members

    mysql> select * from performance_schema.replication_group_members;

    在node2(192.168.204.129)上配置:

    mysql> set SQL_LOG_BIN=0;   #停掉日志记录

    mysql> grant replication slave on *.* to repl@'10.10.10.%' identified by '123456';

    mysql> flush privileges;

    mysql> set SQL_LOG_BIN=1;  #开启日志记录

    mysql> change master to master_user='repl',master_password='123456'  for channel 'group_replication_recovery';  #构建group replication集群

     安装group replication插件

    mysql> install PLUGIN group_replication SONAME 'group_replication.so';

    3.3  把实例添回到之前的复制组

    mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;

    Query OK, 0 rows affected (0.00 sec)

    mysql> start group_replication;

    Query OK, 0 rows affected (6.65 sec)

    在node2上查看复制组状态

    mysql> select * from performance_schema.replication_group_members;

    node3和node2的配置一样。

    以上单master节点的集群就搭建完毕!

    查看集群参数设置列表show variables like 'group_replication%';

    multi-primary模式(多主master模式):

    1、该模式启用需设置两个参数

    group_replication_single_primary_mode=0  #这个参数很好理解,就是关闭单master模式

    group_replication_enforce_update_everywhere_checks=1 #这个参数设置多主模式下各个节点严格一致性检查

    2、 默认启动的都是单master模式,其他节点都设置了read_only、super_read_only这两个参数,需要修改这两个配置

    3、 完成上面的配置后就可以执行多点写入了,多点写入会存在冲突检查,这耗损性能挺大的,官方建议采用网络分区功能,在程序端把相同的业务定位到同一节点,尽量减少冲突发生几率。

    由单主模式修改为多主模式方法

    在原来单主模式的主节点执行操作如下:

    stop GROUP_REPLICATION;

    set global group_replication_single_primary_mode=off;

    set global group_replication_enforce_update_everywhere_checks=ON;

    SET GLOBAL group_replication_bootstrap_group=ON;

    START GROUP_REPLICATION;

    SET GLOBAL group_replication_bootstrap_group=OFF;

    而对于其他的节点,执行下面的操作即可。

    stop GROUP_REPLICATION;

    set global group_replication_allow_local_disjoint_gtids_join=ON;(即使含有组中不存在的事务,也允许当前server加入组)

    set global group_replication_single_primary_mode=off;

    set global group_replication_enforce_update_everywhere_checks=ON;

    start group_replication;

    直接搭建多主master模式

    my.cnf配置文件:

    # Group Replication

    server_id = 100  #服务ID

    gtid_mode = ON  #全局事务

    enforce_gtid_consistency = ON  #强制GTID的一致性

    master_info_repository = TABLE  #将master.info元数据保存在系统表中

    relay_log_info_repository = TABLE  #将relay.info元数据保存在系统表中

    binlog_checksum = NONE  #禁用二进制日志事件校验

    log_slave_updates = ON  #级联复制

    log_bin = binlog   #开启二进制日志记录

    binlog_format= ROW  #以行的格式记录

    transaction_write_set_extraction = XXHASH64 #使用哈希算法将其编码为散列

    loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856' #加入的组名

    loose-group_replication_start_on_boot = off #不自动启用组复制集群

    loose-group_replication_local_address = 'xuegod68.cn:33061' #以本机端口33061接受来自组中成员的传入连接

    loose-group_replication_group_seeds = 'xuegod68.cn:33061,xuegod69.cn:33062,xuegod70.cn:33063' #组中成员访问表

    loose-group_replication_bootstrap_group = off  #不启用引导组

    group_replication_single_primary_mode = off  #关闭单master模式

    group_replication_enforce_update_everywhere_checks = ON  #多主一致性检查

    搭建中遇到的报错

    1.[ERROR] Plugin group_replication reported: '[GCS] Error on opening a connection to 172.17.100.103:23306 on local port: 23306.'

     
     

    这个报错是主节点执行start group_replication时发生的

    重新执行set global group_replication_bootstrap_group=on;

    之后再次start可以正常启动

    实际上之前我已经执行过set global group_replication_bootstrap_group=on这个语句了,为什么会出现这个报错,有点懵比,总之重新执行后解决该问题。

    2.[ERROR] Plugin group_replication reported: 'This member has more executed transactions than those present in the group. Local transactions: ce088f8c-8e5b-11e8-9c42-005056ba04d1:1-2 > Group transactions: 3db33b36-0e51-409f-a61d-c99756e90155:1-2,

     
     

    这个报错是在第二节点执行start的时候产生的,根本原因是因为第二节点没有执行join语句

    执行set global group_replication_allow_local_disjoint_gtids_join=ON;

    完成上述语句的执行之后,再次start,即可成功执行

    3.主从库皆可执行写操作,下列语句执行后,结果为空

    select variable_value from performance_schema.global_status where variable_name='group_replication_primary_member';

     
     

    检查参数中的下列2行是否配置正确

     
     

    在配置相反的情况下,搭建的MGR为多主



    作者:飞翔的Tallgeese
    链接:https://www.jianshu.com/p/f6951215b816
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    使用匿名内部类的创建形式完成线程的2种方式
    线程的2种创建方式
    深入学习 viewport 和 px
    <script> 标签位置应该放在哪里?
    JavaScript 创建对象的几种方式?
    Palindrome Number
    String To Integer
    Reverse Integer
    Zigzag Conversion
    Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/hackerlin/p/11319787.html
Copyright © 2020-2023  润新知