• ADADADADAD

    分分钟搭建MySQL一主多从环境(r12笔记第31天)[ mysql数据库 ]

    mysql数据库 时间:2024-12-24 19:10:37

    作者:文/会员上传

    简介:

    之前写过一篇分分钟搭建MySQL Group Replication的测试环境,如果我们在一台服务器上想搭建一主多从的测试环境,怎么能够分分钟搞定呢,其实稍花点时间写个脚本即可搞定,无非就是

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    之前写过一篇分分钟搭建MySQL Group Replication的测试环境,如果我们在一台服务器上想搭建一主多从的测试环境,怎么能够分分钟搞定呢,其实稍花点时间写个脚本即可搞定,无非就是把哪些程式化的东西整合起来,化繁为简。能够提高效率才是好。

    搭建主从的环境,我们还是准备一个配置文件init2.lst,里面主要是端口和节点标示。

    24801 s1 Y
    24802 s2 N
    24803 s3 N
    24804 s4 N
    24805 s5 N比如上面的写法,就是我创建了5个节点,端口是第一列,第2列是节点的一个标示,生成的节点目录名就是参考这个,第3列是节点的角色,比如一主四从。主为P,从为N


    统一的参数文件,这个地方是值得我们改进的地方,因为个别的配置化参数的不同,就无需指定多个参数文件,可以动态生成。# cat s2.cnf
    [mysqld]
    # server configuration
    datadir=${base_data_dir}/${node_name}
    basedir=${base_dir}

    port=${port}
    socket=${base_data_dir}/${node_name}/${node_name}.sock
    server_id=${port}
    gtid_mode=ON
    enforce_gtid_consistency=ON
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    binlog_checksum=NONE
    log_slave_updates=ON
    log_bin=binlog
    binlog_format=ROW

    而这个功能主角就是整个脚本内容了。

    脚本的内容如下:

    base_dir=/usr/local/mysql
    base_data_dir=/home/data
    pri_port=`cat init2.lst|grep Y|awk '{print $1}'`
    pri_ip=127.0.0.1
    pri_node=`cat init2.lst|grep Y|awk '{print $2}'`

    function init_node
    {
    port=$1
    node_name=$2
    primary_flag=$3
    ${base_dir}/bin/mysqld --initialize-insecure --basedir=${base_dir} --datadir=${base_data_dir}/${node_name} --explicit_defaults_for_timestamp

    chown -R mysql:mysql ${base_data_dir}/${node_dir}

    cp ${base_data_dir}/s2.cnf ${base_data_dir}/${node_name}/${node_name}.cnf
    sed -i 's:${base_data_dir}:'"${base_data_dir}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf
    sed -i 's:${base_dir}:'"${base_dir}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf
    sed -i 's:${node_name}:'"${node_name}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf
    sed -i 's:${port}:'"${port}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf

    chown -R mysql:mysql ${base_data_dir}/${node_name}

    ${base_dir}/bin/mysqld_safe --defaults-file=${base_data_dir}/${node_name}/${node_name}.cnf &

    sleep 5

    ${base_dir}/bin/mysql -P${port} -S ${base_data_dir}/${node_name}/${node_name}.sock -e "show databases"

    if [[ ${primary_flag} = 'Y' ]];then

    mysql -P${port} -S ${base_data_dir}/${node_name}/${node_name}.sock -e "
    CREATE USER rpl_user@'%';
    GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';
    FLUSH PRIVILEGES;
    "
    elif [[ ${primary_flag} = 'N' ]];then
    echo ${pri_node}"primary"
    echo ${pri_port}
    mysqldump -P${pri_port} -S ${base_data_dir}/${pri_node}/${pri_node}.sock --default-character-set=utf8 --single-transaction -R --triggers -q --all-databases |mysql -P${port} -S ${base_data_dir}/${node_name}/${node_name}.sock

    echo "CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' , MASTER_HOST='127.0.0.1',MASTER_PORT="${pri_port}",MASTER_AUTO_POSITION = 1"|mysql -P${port} -S ${base_data_dir}/${node_name}/${node_name}.sock

    mysql -P${port} -S ${base_data_dir}/${node_name}/${node_name}.sock -e "
    start slave;
    show slave status\G;
    "
    else
    echo 'Please check variable primary_flag'
    fi
    }

    #MAIN

    while read line
    do
    echo ${seed_list}
    init_node $line
    done <init2.lst 有了之前的模板和基础准备,整个过程大概也就一个小时就能够在一个小时左右完成测试和练习。

    我写文章的这会儿,已经创建了快十多遍。所以分分钟绝对不是噱头。



    分分钟搭建MySQL一主多从环境(r12笔记第31天).docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: 31天r12笔记