• mysql搭建主从结构


    1.安装 mysql服务

    1.卸载系统自带的相关数据库

    rpm -qa | grep mysql
    rpm -qa | grep mariadb
    
    rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
    

    2.部署Mysql

    tar -zxvf mysql-5.7.25-el7-x86_64.tar.gz -C /opt/module/
    

    3.账号与权限

    #添加账号
    groupadd mysql
    useradd -g mysql -s /sbin/nologin mysql
    
    #创建data目录
    mkdir /data2/mysql/data
    
    #修改权限
    chown -R mysql:mysql /data2/mysql/data
    

    4.初始化Mysql,获取root@localhost的初始密码

    cd  /opt/module/mysql-5.7.25-el7-x86_64
    
    ./bin/mysqld --initialize --user=mysql --basedir=/opt/module/mysql-5.7.25-el7-x86_64 --datadir=/data2/mysql/data
    
    #查看初始密码
    cat /var/log/mysqld/mysqld.log | grep 'temporary password'
    

    5.配置环境变量

    vim /etc/profile
    
    #Mysql
    export MYSQL_HOME=/opt/module/mysql-5.7.25-el7-x86_64
    export PATH=$PATH:$MYSQL_HOME/bin
    

    6.设置文件路径:log && pid && socket

    # 日志路径
    mkdir -p /var/log/mysqld
    touch /var/log/mysqld/mysqld.log
    chown -R mysql:mysql /var/log/mysqld/
    
    # pid路径
    mkdir -p /var/run/mysqld
    chown -R mysql:mysql /var/run/mysqld/
    
    # socker路径
    mkdir -p /var/lib/mysqld
    chown -R mysql:mysql /var/lib/mysqld/
    ln -s /var/lib/mysqld/mysql.sock /tmp/mysql.sock
    

    7.设置开机启动

    #复制开机启动脚本到系统服务
    cp /opt/module/mysql-5.7.25-el7-x86_64/support-files/mysql.server /etc/rc.d/init.d/mysqld
    chown mysql:mysql /etc/rc.d/init.d/mysqld
    
    # 修改默认的"basedir"与"datadir"
    vim /etc/rc.d/init.d/mysqld
    basedir=/opt/module/mysql-5.7.25-el7-x86_64
    datadir=datadir=/data2/mysql/data
    
    #添加开机启动脚本
    chkconfig --add mysqld
    
    #3:带网络的多用户,也就是所谓的纯字符模式
    #5:图形界面的多用户模式
    chkconfig --level 35 mysqld on
    

    2.配置 mysql

    mkdir -p /opt/module/mysql-5.7.25-el7-x86_64/etc
    vim  /opt/module/mysql-5.7.25-el7-x86_64/etc/my.cnf
    

    1.配置 master

    [mysqld]
    server-id=2
    
    # 启用二进制日志,存放在datadir下
    log-bin=/data2/mysql/data/master-bin
    log_bin_index = master-bin.index
    
    # STATEMENT模式(SBR)每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
    # ROW模式(RBR)不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。
    # MIXED模式(MBR),以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
    binlog_format=mixed   #设置binlog模式,混合模式
    expire_logs_days = 7  #保留7天的binlog
    
    character-set-server=utf8
    max_connections = 3000
    log-error=/var/log/mysqld/mysqld.log
    #记录当前MySQL进程的process id目录,启动MySQL时会去检查pid,如果存在且占用状态则会启动报错,如果存在并不占用会删除该pid,没有pid后启动MySQL会新建一个pid记录MySQL进程,主要是为了防止同一个数据库被启动多次
    pid-file=/var/run/mysqld/mysqld.pid
    socket=/var/lib/mysqld/mysql.sock
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    basedir = /opt/module/mysql-5.7.25-el7-x86_64
    datadir = /data2/mysql/data
    
    [mysql]
    default-character-set=utf8
    

    2.配置 slave

    [mysqld]
    server-id=137
    
    read_only = 1
    
    #将master的连接信息写入表:mysql.salve_master_info
    master_info_repository=TABLE
    
    #将中继日志的信息写入表:mysql.slave_realy_log_info
    relay_log_info_repository=TABLE
    
    #中继日志自我修复;当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性
    relay_log_recovery = on
    
    #relay-log日志记录的是从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件
    relay-log = /data2/mysql/data/slave-relay-bin
    
    #主服务器I/O日志读取、记录及存放
    relay-log-index = slave-relay-bin.index
    
    character-set-server=utf8
    max_connections = 3000
    log-error=/var/log/mysqld/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    socket=/var/lib/mysqld/mysql.sock
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    basedir = /opt/module/mysql-5.7.25-el7-x86_64
    datadir = /data2/mysql/data
    
    [mysql]
    default-character-set=utf8
    

    3.启动 master,slave,并登陆mysql

    service mysqld start
    

    4.master创建复制用户

    grant replication slave on *.* to 'slave'@'192.168.2.x' identified by '123456';
    

    #查看当前数据库的二进制日志写到什么位置(只有打开二进制日志,这句命令才有结果)
    show master status;
    

    5.从服务器配置同步信息

    change master to master_host='192.168.2.x',master_user='slave',master_password='xxxx',master_port=3306,master_log_file='master-bin.000002',master_log_pos=846;
    

    6.从服务器启动复制线程

    start slave;
    
    show slave statusG
    

    Slave_IO_Running: Yes 表示成功连接到master并且下载日志
    Slave_SQL_Running: Yes 表示成功执行日志中的SQL语句

  • 相关阅读:
    python爬取二手房库存,存数据库,生成折线图(下)
    python爬取二手房库存,存数数据库,生成折线图(上)
    python爬取二手房库存,存数据库,生成折线图(中)
    vue input 复制后无法修改
    js对象应用问题
    redis5.0集群搭建
    查看java 字节码的方式
    python 运行js
    对java基本对象的构想
    学习第39天
  • 原文地址:https://www.cnblogs.com/wuning/p/11913179.html
Copyright © 2020-2023  润新知