• Mysql 5.7.18:主从复制,io优化


    #目录

    #挂盘
    #时间同步
    #master节点,进行如下操作:
      #下载安装 #初始化 #配置文件 #开机启动 #服务启动 #初始数据库
    #slave节点,进行如下操作:
      #下载安装 #初始化 #配置文件 #开机启动 #服务启动 #初始化数据库
    #主从开启
      #master上分配从库复制的账户密码 #slave上开启主从复制 #master上创建数据库 #slave上查看是否同步数据库 #开机启动
    #测试
      #master上创建表 #slave上查看数据
    #磁盘性能优化

    #简介

    原本是一个开放源代码关系数据库管理系统,原开发者为瑞典MySQL AB公司,该公司于2008年被昇阳微系统(Sun Microsystems)收购。2009年,甲骨文公司(Oracle)收购昇阳微系统公司,MySQL成为Oracle旗下产品。

    MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科GoogleFacebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。

    本文简要介绍mysql的主从复制和io优化的相关内容,mysql的主从复制主要应用在数据库的备份和读写分离上,备份即是通过从库来实现,读写分离主要是来实现性能优化和负载分担。其中磁盘性能优化是在数据库运维中踩的一个坑,当时测试环境机器人跑起来,主库读写上涨,从库延迟 show slave status查看Seconds_Behind_Master值逐渐增加,远远落后于主库,从库表现为磁盘io过大,将近2000 iops,解决方案为配置文件添加两个参数,使得io降至100-200iops左右,主从同步正常。

    #挂盘

    fdisk -l

    mkfs.ext4 -j /dev/sdc

    echo "/dev/sdc        /data/mysqldata         ext4    defaults        0 0" >> /etc/fstab

    mount -a

    mount 

    #时间同步

    yes|cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

    hwclock -w

    #master节点,进行如下操作:

    #下载安装

    yum -y install autoconf wget

    mkdir -pv /data/soft

    wget -P /data/soft/ http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

    cd /data/soft

    tar -xf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/

    cd /usr/local/

    ln -sv mysql-5.7.18-linux-glibc2.5-x86_64 mysql

     

    useradd -M -s /sbin/nologin mysql

    cat /etc/passwd |grep mysql

    cat /etc/group |grep mysql

     

    mkdir -p /data/mysqldata

    chown -R mysql:mysql /data/mysqldata

     

    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

     

    sed -i 's#^basedir=$#basedir=/usr/local/mysql#' /etc/init.d/mysqld

    sed -i 's#^datadir=$#datadir=/data/mysqldata#'  /etc/init.d/mysqld

     

    chmod +x /etc/init.d/mysqld

     

    #初始化

    cd /usr/local/mysql/bin/

    ./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldata

     

    #配置文件

      1 cat > /etc/my.cnf << "EOF"
      2 
      3 [client]
      4 
      5 port = 3306
      6 
      7 socket = /tmp/mysql.sock
      8 
      9 default-character-set = utf8
     10 
     11 [mysql]
     12 
     13 no-auto-rehash
     14 
     15 default-character-set = utf8
     16 
     17  
     18 
     19 [mysqld]
     20 
     21 server-id = 1
     22 
     23 port = 3306
     24 
     25 user = mysql
     26 
     27 basedir = /usr/local/mysql
     28 
     29 datadir = /data/mysqldata
     30 
     31 socket = /tmp/mysql.sock
     32 
     33 default-storage-engine = INNODB
     34 
     35 character-set-server = utf8
     36 
     37 connect_timeout = 60
     38 
     39 interactive_timeout = 28800
     40 
     41 wait_timeout = 28800
     42 
     43 back_log = 500
     44 
     45 event_scheduler = ON
     46 
     47 skip_name_resolve = ON
     48 
     49  
     50 
     51 ###########master-slave##########
     52 
     53 log-bin = mysql-bin
     54 
     55 binlog_format = row
     56 
     57 max_binlog_size = 128M
     58 
     59 binlog_cache_size = 2M
     60 
     61 expire-logs-days = 5
     62 
     63 log-slave-updates=true
     64 
     65 gtid-mode=on
     66 
     67 enforce-gtid-consistency=true
     68 
     69 master_info_repository=TABLE
     70 
     71 relay_log_info_repository=TABLE
     72 
     73 relay_log_recovery=1
     74 
     75 sync-master-info=1
     76 
     77 slave-parallel-workers=4
     78 
     79 binlog-checksum=CRC32
     80 
     81 master-verify-checksum=1
     82 
     83 slave-sql-verify-checksum=1
     84 
     85 binlog-rows-query-log_events=1
     86 
     87 binlog-ignore-db=mysql
     88 
     89 binlog-ignore-db=test
     90 
     91 binlog-ignore-db=information_schema
     92 
     93 binlog-ignore-db=performance_schema
     94 
     95  
     96 
     97 ###往磁盘里写入数据的频率,极大影响数据库磁盘io性能,配合iostat -dxm 1
     98 
     99 innodb_flush_log_at_trx_commit = 2
    100 
    101 sync_binlog=100
    102 
    103  
    104 
    105 ###该参数可以提升数据库的读的性能,一般设置为内存的80%
    106 
    107 innodb_buffer_pool_size=6G
    108 
    109  
    110 
    111 ###########slow_query##########
    112 
    113 slow_query_log = 1
    114 
    115 slow_query_log_file = slow.log
    116 
    117 long_query_time = 2
    118 
    119  
    120 
    121 max_connections = 3000
    122 
    123 max_connect_errors = 32767
    124 
    125 log_bin_trust_function_creators = 1
    126 
    127 transaction_isolation = READ-COMMITTED
    128 
    129 log_error = error.log
    130 
    131 EOF
    my.cnf 

    #开机启动

    cat >> /etc/profile << "EOF"

    export PATH=$PATH:/usr/local/mysql/bin

    EOF

    source /etc/profile

     

    #服务启动

    /etc/init.d/mysqld start

    #服务启动

    mysql -uroot

    use mysql;

    update user set authentication_string=password('123456') where user='root';

    flush privileges;

    q

    #slave节点,进行如下操作:

    #slave节点,进行如下操作:

    yum -y install autoconf wget

     

    wget -P /data/soft/ http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

    cd /data/soft

    tar -xf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/

     

    cd /usr/local/

    ln -sv mysql-5.7.18-linux-glibc2.5-x86_64 mysql

     

    useradd -M -s /sbin/nologin mysql

    cat /etc/passwd |grep mysql

    cat /etc/group |grep mysql

     

    mkdir -p /data/mysqldata

    chown -R mysql:mysql /data/mysqldata

     

    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

     

    sed -i 's#^basedir=$#basedir=/usr/local/mysql#' /etc/init.d/mysqld

    sed -i 's#^datadir=$#datadir=/data/mysqldata#'  /etc/init.d/mysqld

     

    chmod +x /etc/init.d/mysqld

     

    #初始化

    cd /usr/local/mysql/bin/

    ./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldata

     

    #配置文件

      1 cat > /etc/my.cnf << "EOF"
      2 
      3 [client]
      4 
      5 port = 3306
      6 
      7 socket = /tmp/mysql.sock
      8 
      9 default-character-set = utf8
     10 
     11 [mysql]
     12 
     13 no-auto-rehash
     14 
     15 default-character-set = utf8
     16 
     17  
     18 
     19 [mysqld]
     20 
     21 server-id = 2
     22 
     23 port = 3306
     24 
     25 basedir = /usr/local/mysql
     26 
     27 datadir = /data/mysqldata
     28 
     29 socket = /tmp/mysql.sock
     30 
     31 default-storage-engine = INNODB
     32 
     33 character-set-server = utf8
     34 
     35 connect_timeout = 60
     36 
     37 interactive_timeout = 28800
     38 
     39 wait_timeout = 28800
     40 
     41 back_log = 500
     42 
     43 event_scheduler = ON
     44 
     45 skip_name_resolve = ON
     46 
     47  
     48 
     49 ###########master-slave##########
     50 
     51 log-bin = mysql-bin
     52 
     53 binlog_format = row
     54 
     55 max_binlog_size = 128M
     56 
     57 binlog_cache_size = 2M
     58 
     59 expire-logs-days = 5
     60 
     61 log-slave-updates=true
     62 
     63 gtid-mode=on
     64 
     65 enforce-gtid-consistency=true
     66 
     67 master_info_repository=TABLE
     68 
     69 relay_log_info_repository=TABLE
     70 
     71 relay_log_recovery=1
     72 
     73 sync-master-info=1
     74 
     75 slave-parallel-workers=4
     76 
     77 binlog-checksum=CRC32
     78 
     79 master-verify-checksum=1
     80 
     81 slave-sql-verify-checksum=1
     82 
     83 binlog-rows-query-log_events=1
     84 
     85 binlog-ignore-db=mysql
     86 
     87 binlog-ignore-db=test
     88 
     89 binlog-ignore-db=information_schema
     90 
     91 binlog-ignore-db=performance_schema
     92 
     93  
     94 
     95 ###往磁盘里写入数据的频率,极大影响从库磁盘io性能
     96 
     97 innodb_flush_log_at_trx_commit = 2
     98 
     99 sync_binlog=100
    100 
    101  
    102 
    103 innodb_buffer_pool_size=6G
    104 
    105 slave_exec_mode=IDEMPOTENT
    106 
    107  
    108 
    109 #该配置能够实现一台主机上的多个数据库到从库的多对一复制
    110 
    111 #replicate-rewrite-db = user -> com
    112 
    113 #replicate-rewrite-db = trader -> com
    114 
    115 #replicate-rewrite-db = pay -> com
    116 
    117  
    118 
    119 ###########slow_query##########
    120 
    121 slow_query_log = 1
    122 
    123 slow_query_log_file = slow.log
    124 
    125 long_query_time = 2
    126 
    127 max_connections = 3000
    128 
    129 max_connect_errors = 32767
    130 
    131 log_bin_trust_function_creators = 1
    132 
    133 transaction_isolation = READ-COMMITTED
    134 
    135 log_error = error.log
    136 
    137 EOF
    my.cnf 

    #开机启动

    cat >> /etc/profile << "EOF"

    export PATH=$PATH:/usr/local/mysql/bin

    EOF

     

    source /etc/profile

     

    #服务启动

    /etc/init.d/mysqld start

    echo "/etc/init.d/mysqld start" >> /etc/rc.d/rc.local

     

    #初始化数据库

    mysql -uroot

    use mysql;

    update user set authentication_string=password('123456') where user='root';flush privileges;

    flush privileges;

    q

    #主从开启

    #master上分配从库复制的账户密码

    mysql -uroot -p'123456' -e "grant replication slave on *.* to 'slave'@'%' identified by 'slave123456';"

    mysql -uroot -p'123456' -e "use mysql; select user,repl_slave_priv from user where user='slave';"

    #slave上开启主从复制

    mysql -uroot -p'123456' -e "change master to master_host='10.0.0.4',master_user='slave',master_password='slave123456',master_connect_retry=1;"

    mysql -uroot -p'123456' -e "start slave;"

    mysql -uroot -p'123456' -e "show slave statusG;"

     

    #master上创建数据库

    mysql -uroot -p'123456' -e "create database trader default character set utf8 collate utf8_bin;grant all on trader.* to 'com'@'%' identified by '654321';"

    mysql -uroot -p'123456' -e "create database pay default character set utf8 collate utf8_bin;grant all on pay.* to 'com'@'%' identified by '654321';"

    mysql -uroot -p'123456' -e "create database user default character set utf8 collate utf8_bin;grant all on user.* to 'com'@'%' identified by '654321';"

     

    #slave上查看是否同步数据库

    mysql -uroot -p'123456' -e "show slave statusG;"

    mysql -uroot -p'123456' -e "show databases;"

    #开机启动

    /etc/init.d/mysqld start

    echo "/etc/init.d/mysqld start" >> /etc/rc.d/rc.local

    chmod +x /etc/rc.d/rc.local

    #测试

    #master上创建表

    mysql -uroot -p'123456' -e "use pay; create table pay (id int unsigned not null auto_increment, name char(20) not null, age tinyint not null, primary key(id), unique key(name), index(age)); insert into pay(name,age)  values ('user1',20); select * from pay;"

    mysql -uroot -p'123456' -e "use trader; create table trader (id int unsigned not null auto_increment, name char(20) not null, age tinyint not null, primary key(id), unique key(name), index(age)); insert into trader(name,age)  values ('user1',20); select * from trader;"

    mysql -uroot -p'123456' -e "use user; create table user (id int unsigned not null auto_increment, name char(20) not null, age tinyint not null, primary key(id), unique key(name), index(age)); insert into user(name,age)  values ('user1',20); select * from user;"

    #slave上查看数据

    mysql -uroot -p'123456' -e "show databases; use com; show tables;";

    #磁盘性能优化

    ###往磁盘里写入数据的频率,极大影响数据库磁盘io性能,配合iostat -dxm 1

    innodb_flush_log_at_trx_commit = 2

    sync_binlog=100

     

  • 相关阅读:
    【代码笔记】JTable 、TableModel的使用3
    学习JSP(二)
    Tomcat文件配置
    学习JSP(一)
    配置elipse
    配置Jdk
    定义新运算练习题
    学习JAVA所需的东西
    学习秘籍
    总有那么一个人
  • 原文地址:https://www.cnblogs.com/William-Guozi/p/Mysql.html
Copyright © 2020-2023  润新知