zoukankan      html  css  js  c++  java
  • MYSQL5.6和5.7编译标准化安装与配置

    文档结构图如下:

    一、前期规划

    1、软件环境以及说明

    操作系统:RedHat Linux 6.7 64位

    数 据 库:MYSQL5.6.38/5.7.20

    MySQL 5.6:初始化数据时需要进到家目录的 script 目录下

     

    执行:

    /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql --defaults-file=/etc/my3306.cnf --user=mysql

    我的环境执行如下:

    ./mysql_install_db --basedir=/usr/local/mysql5.6 --datadir=/mydata/mysql/mysql3306/data --defaults-file=/etc/my3306.cnf --user=mysql

    此时数据库密码为空。

    MySQL 5.7:初始化数据时需要进到家目录的 bin 目录下

     

    执行:

    /usr/local/mysql/bin/mysqld --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql/ --initialize

    已然已经废弃了使用 mysql_install_db 这个命令进行初始化数据的操作了。

     

    我的环境执行如下:

    /usr/local/mysql5.7/bin/mysqld --defaults-file=/etc/my3307.cnf --basedir=/usr/local/mysql5.7 --datadir=/mydata/mysql/mysql3307/data/ --user=mysql --initialize

    注:--initialize 会自动生成密码在 error log 里面。如果加 --initialize-insecure  密码为空

     

    二、安装数据库前准备

    1、Selinux和系统防火墙iptables 需要关闭

    service iptables stop

    chkconfig iptables off

    vi /etc/sysconfig/selinux

    setenforce 0

    查看IPTABLES 当前状态与关闭过程

    chkconfig --list|grep iptables

    也可以根据需要开放端口。

     

    2、关闭sendmail服务

    先查看是否安装sendmail的相关组件。

    rpm -qa | grep sendmail

     

     

    如果已安装sendmail插件:

    service sendmail stop

    service sendmail stop

    chkconfig sendmail off

    3、修改IO调度

    查看IO 调度文件:

    cat /sys/block/sda/queue/scheduler

    修改I/O调度器;需要在 /etc/grub.conf 加入elevator=deadline,保证永久有效。

     

    Deadline(截止时间调度程序)

    特点:

    通过时间以及硬盘区域进行分类,这个分类和合并要求类似于noop的调度程序.

    Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象.

    Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择.

     

    4、SWAP分区的设置

    Swappiness值大小对如何使用swap分区有着很大的影响。

    它有0和100两个极限值,0代表最大限度的使用物理内存,然后才使用swap分区,这种行为有可能导致系统内存溢出,出现OOM的错误,从而导致mysql被意外KILL掉,所以需要谨慎设置。

    100则是积极的使用swap分区,并且把内存上面的数据及时搬到swap分区里(不建议)。这里建议大家不分配swap,或者分配4GB的空间就足够了。

     

    查看swappiness文件

    cat /proc/sys/vm/swappiness

     

    vm.swappiness默认为60,设置为0表示尽量少使用swap,100表示尽量将inactive的内存页交换到swap里或者释放cache。inactive内存的意思是程序映射着,但是”长时间”不用的内存。我们可以利用vmstat查看系统里面有多少inactive的内存。

     # vmstat -a 1

    这个值推荐设置为5,设置方法如下,在/etc/sysctl.conf文件中增加一行。

    vm.swappiness = 5

    sysctl -p生效。

     

    5、文件系统的选择

    推荐使用xfs文件系统,相比ext4,它更方便管理,支持动态扩容,删除文件也方便。(redhat 7默认xfs)

      

    6、操作系统的限制

    查看操作系统的限制情况:

    ulimit -a

     

     

    open files 如果设置不合理,当前服务器的连接过多或者表过多时,就有可能出现打不来表或者访问不了表的现象,默认情况下,Linux的最大句柄数为1024个,表示单个进程最多可以访问1024个文件句柄。如果超过默认值,就会出现文件句柄超限的错误“too much open files”。

     

    max user processes 参数的用途是,有时候我们可能会跑对个实例,但是发现创建不了新的连接,报出“resource temprarily unavaliable”的错误,表示没有足够的资源。

     

    为防止以上两种报错情况,我们可以修改系统的软件限制。

     

    vi /etc/security/limits.conf

     

    *        soft    nproc   65535

    *        hard    nproc  65535

    *        soft    nofile  65535

    *        hard    nofile  65535

     

    7、numa需要关闭

    关闭numa功能可以更好地分配内存,不需要采用swap的方式来获取内存;有经验的系统管理员和DBA都知道使用swap导致的数据库性能下降影响很大。

    语句如下:

    具体情况具体修改

    方法一:

    numactl --interleave=all /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

    我的环境是:

    numactl --interleave=all /usr/local/mysql5.6/bin/mysqld_safe --defaults-file=/etc/my3306.cnf &

    numactl --interleave=all /usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/my3307.cnf &

     

    方法二:

    vi /etc/grub.conf

    numa=off

     

    保存,重启服务器。

     

    8、上传镜像文件并安装源码包

    yum -y install make gcc-c++ cmake bison-devel ncurses-devel glibc

     

    三、安装MYSQL5.6

    1、安装准备

    先把软件包传到 /usr/local/ 目录下

    groupadd mysql

    useradd -g mysql mysql -s /sbin/nologin

    设置mysql登入密码:passwd mysql

     

    -s 指定它的shell

    -d 指定用户主目录

    -g 用户组 指定用户所属的用户组。

    -G 用户组,用户组 指定用户所属的附加组。

    -M:不要自动建立用户的登入目录。

     

    passwd mysql        --可以不用设置密码,因为MYSQL用户不登录。

     

    cd /usr/local/

    tar -zxvf mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz

    ln -s mysql-5.6.38-linux-glibc2.12-x86_64 mysql5.6  目录可以自己设置

     

    建立目录:

     

    mkdir -p /mydata/mysql/mysql3306/{data,logs}  --生产中建议用项目名+端口号

     

    修改权限:

     

    chown -R mysql:mysql /mydata/mysql/mysql3306/

    chown -R mysql:mysql /usr/local/mysql5.6

    chown -R mysql:mysql /mydata

     

    设置环境变量:

    修改方法一:

    echo $PATH

    export PATH=$PATH:/usr/local/mysql5.6/bin

     

    修改方法二:不推荐用此方法

    echo "export PATH=$PATH:/usr/local/mysql5.6/bin" >> /etc/profile

     

    或者用

    vim /etc/profile

    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql5.6/bin

    source /etc/profile

     

    准备my3306.cnf 文件,可以自己命名成想要的文件名称。

    阿里云是5.6.16版本

    cpu 8核 内存32G  innodb_buffer_pool_size 24G;具体设置看情况修改参数,没有分离出undo,tmp,测试环境可以自定义修改innodb_data_file_path,innodb_buffer_pool_size等参数的大小;也可参照姜老师的文件。

     

    [client]

    port = 3306

    socket = /tmp/mysqlclient.sock

    default-character-set=utf8

     [mysql]

    default-character-set=utf8

    [mysqld]

    port = 3306

    socket = /tmp/mysql3306.sock

    basedir = /usr/local/mysql5.6

    datadir = /mydata/mysql/mysql3306/data

    open_files_limit = 3072

    back_log = 103

    max_connections = 512

    max_connect_errors = 100000

    lower_case_table_names=1   ##忽略大小写

    transaction_isolation = READ-COMMITTED

    #transaction_isolation = REPEATABLE-READ  ##一般业务的报表用这个

    table_open_cache = 512

    max_statement_time=10000  #最长sql 执行时间ms 看情况设置,避免长连接

    external-locking = FALSE

    max_allowed_packet = 128M

    sort_buffer_size = 2M

    join_buffer_size = 2M

    thread_cache_size = 51

    query_cache_size = 32M

    tmp_table_size = 96M

    max_heap_table_size = 96M

    slow_query_log = 1

    slow_query_log_file = /mydata/mysql/mysql3306/logs/slow.log

    log-error = /mydata/mysql/mysql3306/logs/error.log

    log_bin_trust_function_creators=1

    long_query_time = 0.05

    server-id = 1323306

    log-bin = /mydata/mysql/mysql3306/logs/mysql-bin

    sync_binlog = 1

    binlog_cache_size = 4M

    max_binlog_cache_size = 128M

    max_binlog_size = 1024M

    expire_logs_days = 7

    key_buffer_size = 32M

    read_buffer_size = 1M

    read_rnd_buffer_size = 16M

    bulk_insert_buffer_size = 64M

    character-set-server=utf8

    default-storage-engine=InnoDB

    binlog_format=row

    #gtid_mode=on

    #log_slave_updates=1

    #enforce_gtid_consistency=1

    interactive_timeout=100

    wait_timeout=100

    innodb_additional_mem_pool_size = 16M

    innodb_buffer_pool_size = 1434M

    innodb_data_file_path = ibdata1:1024M:autoextend

    innodb_flush_log_at_trx_commit = 1

    innodb_log_buffer_size = 16M

    innodb_log_file_size = 256M

    innodb_log_files_in_group = 2

    innodb_max_dirty_pages_pct = 50

    innodb_file_per_table = 1

    innodb_locks_unsafe_for_binlog = 0

    [mysqldump]

    quick

    max_allowed_packet = 32M

     

    2、安装MYSQL5.6

    cd /usr/local/mysql5.6/scripts/

    ./mysql_install_db --basedir=/usr/local/mysql5.6 --datadir=/mydata/mysql/mysql3306/data --defaults-file=/etc/my3306.cnf --user=mysql

    如下:

     

    两次OK

     

     

    启动mysql5.6

    /usr/local/mysql5.6/bin/mysqld_safe --defaults-file=/etc/my3306.cnf &

     

     

    查看mysql进程,验证是否启动成功:

     

    注意:

    Mysql 读取配置文件的顺序是

    /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

     

    MYSQL关闭:

    /usr/local/mysql5.6/bin/mysqladmin -S /tmp/mysql3306.sock shutdown

     

     

    本地登陆:

    mysql -S /tmp/mysql3306.sock

     

    3、参数修改

    1、修改数据库root密码

    [root@laodeng5 mysql-5.6.15]# mysqladmin -u root password 'mysql'

    或者

    方法二:

    mysql>set password for 'root'@'localhost'=password('mysql');

    mysql>flush privileges;

     

    登陆方式:

    mysql -S /tmp/mysql3306.sock -uroot -p'mysql'

    关闭数据库:

    mysqladmin -S /tmp/mysql3306.sock shutdown -uroot –p’mysql’

     

    2、5.7之前需要安全加固

    show databases;

    select user,host,password from mysql.user;   --实际就需要user localhost,其它都可以删掉

    delete from mysql.user where user != 'root' or host != 'localhost';

    mysql> grant all privileges  on *.* to root@'%' identified by "password";  --windows 只允许本地访问,需要给root赋权
    Query OK, 0 rows affected (0.00 sec)

     

     

     

    3、删除测试库(可选)

    select * from mysql.dbG

    truncate table mysql.db;

    drop database test;

    flush privileges;

     

    怎么确认mysql是否启动起来的?

    A.查看进程是否存在

    ps aux|grep mysqld

     

    B.查看端口是不是监听正确

    netstat -nlap|grep mysqld

    ss -lnpt | grep mysqld

     

    C.查看错误日志有无异常

    vim

    tail

    less

    设置大小写不敏感:

    mysql> show variables like '%case%';

    +------------------------+-------+

    | Variable_name          | Value |

    +------------------------+-------+

    | lower_case_file_system | OFF   |

    | lower_case_table_names | 1     |

    +------------------------+-------+

     

    注意:lower_case_table_names=1,参数为静态参数,需要在my.cnf配置后进去重启生效。

     

     

    四、安装MYSQL5.7

    1、安装准备工作

    MYSQL5.7已经废弃了mysql_install_db 这个初始化命令了。

    先把软件包传到 /usr/local/ 目录下

    groupadd mysql

    useradd -g mysql mysql -s /sbin/nologin

    设置mysql登入密码:passwd mysql    --可以不用设置密码,因为MYSQL用户不登录。

     

    -s 指定它的shell

    -d 指定用户主目录

    -g 用户组 指定用户所属的用户组。

    -G 用户组,用户组 指定用户所属的附加组。

    -M:不要自动建立用户的登入目录。

     

    passwd mysql

     

    cd /usr/local/

    tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

    ln -s mysql-5.7.20-linux-glibc2.12-x86_64 mysql5.7

     

    mkdir -p /mydata/mysql/mysql3307/{data,logs}

     

    修改权限:

     

    chown -R mysql:mysql /mydata/mysql/mysql3307/

    chown -R mysql:mysql /usr/local/mysql5.7

    chown -R mysql:mysql /mydata

     

    设置环境变量:

    修改方法一:

    echo $PATH

    export PATH=$PATH:/usr/local/mysql5.7/bin

     

    修改方法二:不推荐用此方法

    echo "export PATH=$PATH:/usr/local/mysql5.7/bin" >> /etc/profile

     

    或者用

    vim /etc/profile

    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql5.7/bin

    source /etc/profile

     

    准备my3307.cnf 文件,可以自己命名成想要的文件名称。参数按照实际情况进行修改。

     

    [client]

    port = 3307

    socket = /tmp/mysql5.7.sock

    default-character-set=utf8

    [mysql]

    prompt="u@db R:m:s [d]> "

    no-auto-rehash

    [mysqld]

    user = mysql

    port = 3307

    basedir = /usr/local/mysql5.7

    datadir = /mydata/mysql/mysql3307/data

    socket = /tmp/mysql3307.sock

    log_bin_trust_function_creators=1

    character-set-server = utf8mb4

    event_scheduler=1

    sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    lower_case_table_names=1   ##忽略大小写

    transaction_isolation = READ-COMMITTED

    #transaction_isolation = REPEATABLE-READ  ##一般业务的报表用这个

    max_execution_time=10000 #最长sql 执行时间ms 看情况设置,避免长连接

    skip_name_resolve = 1

    open_files_limit = 65535

    back_log = 1024

    max_connections = 500

    max_connect_errors = 1000000

    table_open_cache = 1024

    table_definition_cache = 1024

    table_open_cache_instances = 64

    thread_stack = 512K

    external-locking = FALSE

    max_allowed_packet = 32M

    sort_buffer_size = 4M

    join_buffer_size = 4M

    thread_cache_size = 768

    query_cache_size = 0

    query_cache_type = 0

    interactive_timeout = 600

    wait_timeout = 600

    tmp_table_size = 32M

    max_heap_table_size = 32M

    slow_query_log = 1

    slow_query_log_file = /mydata/mysql/mysql3307/logs/slow.log

    log-error = /mydata/mysql/mysql3307/logs/error.log

    long_query_time = 0.1

    server-id = 3307101

    log-bin = /mydata/mysql/mysql3307/logs/mysql-binlog

    sync_binlog = 1

    binlog_cache_size = 4M

    max_binlog_cache_size = 1G

    max_binlog_size = 1G

    expire_logs_days = 7

    master_info_repository = TABLE

    relay_log_info_repository = TABLE

    gtid_mode = on

    enforce_gtid_consistency = 1

    log_slave_updates

    binlog_format = row

    relay_log_recovery = 1

    relay-log-purge = 1

    key_buffer_size = 32M

    read_buffer_size = 8M

    read_rnd_buffer_size = 4M

    bulk_insert_buffer_size = 64M

    lock_wait_timeout = 3600

    explicit_defaults_for_timestamp = 1

    innodb_thread_concurrency = 0

    innodb_sync_spin_loops = 100

    innodb_spin_wait_delay = 30

    innodb_buffer_pool_size = 1024M

    innodb_buffer_pool_instances = 8

    innodb_buffer_pool_load_at_startup = 1

    innodb_buffer_pool_dump_at_shutdown = 1

    innodb_data_file_path = ibdata1:1G:autoextend

    innodb_flush_log_at_trx_commit = 1

    innodb_log_buffer_size = 32M

    innodb_log_file_size = 2G

    innodb_log_files_in_group = 2

    innodb_max_undo_log_size = 4G

    innodb_io_capacity = 2000

    innodb_io_capacity_max = 4000

    innodb_flush_neighbors = 0

    innodb_write_io_threads = 8

    innodb_read_io_threads = 8

    innodb_purge_threads = 4

    innodb_page_cleaners = 4

    innodb_open_files = 65535

    innodb_max_dirty_pages_pct = 50

    innodb_flush_method = O_DIRECT

    innodb_lru_scan_depth = 4000

    innodb_checksum_algorithm = crc32

    innodb_lock_wait_timeout = 10

    innodb_rollback_on_timeout = 1

    innodb_print_all_deadlocks = 1

    innodb_file_per_table = 1

    innodb_online_alter_log_max_size = 4G

    internal_tmp_disk_storage_engine = InnoDB

    innodb_stats_on_metadata = 0

    innodb_status_file = 1

    innodb_status_output = 0

    innodb_status_output_locks = 0

    performance_schema = 1

    performance_schema_instrument = '%=on'

    #innodb monitor

    innodb_monitor_enable="module_innodb"

    innodb_monitor_enable="module_server"

    innodb_monitor_enable="module_dml"

    innodb_monitor_enable="module_ddl"

    innodb_monitor_enable="module_trx"

    innodb_monitor_enable="module_os"

    innodb_monitor_enable="module_purge"

    innodb_monitor_enable="module_log"

    innodb_monitor_enable="module_lock"

    innodb_monitor_enable="module_buffer"

    innodb_monitor_enable="module_index"

    innodb_monitor_enable="module_ibuf_system"

    innodb_monitor_enable="module_buffer_page"

    innodb_monitor_enable="module_adaptive_hash"

    [mysqldump]

    quick

    max_allowed_packet = 32M

     

    2、安装MYSQL5.7

    cd /usr/local/mysql5.7/bin/

    ./mysqld --defaults-file=/etc/my3307.cnf --basedir=/usr/local/mysql5.7 --datadir=/mydata/mysql/mysql3307/data/ --user=mysql --initialize

     

    初始化加上initialize参数,表示会生成一个临时的数据库初始化密码,记录在log-error(错误日志)里面,如果加上--initialize-insecure参数,代表无密码进入。建议使用生成的初始化密码方式。

     

    启动mysql5.7

    /usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/my3307.cnf &

     

    查看生成的密码文件:

    cat /mydata/mysql/mysql3307/logs/error.log |grep password

     

     

    3、参数修改:

    登陆并修改密码:

    /usr/local/mysql5.7/bin/mysql -S /tmp/mysql3307.sock -uroot -p'ogdf8ru<r,nI'

     

    设置ROOT密码永不过期:

    alter user 'root'@'localhost' password expire never;

     

    设置ROOT 可以从其他客户端或者服务器登陆:

     

    mysql> update mysql.user set Host='%' where User='root';

    Query OK, 0 rows affected (0.00 sec)

    Rows matched: 1  Changed: 0  Warnings: 0

     

    mysql> flush privileges;

    Query OK, 0 rows affected (0.01 sec)

    mysql> select  Host,User from mysql.user;

    +-----------+---------------+

    | Host      | User          |

    +-----------+---------------+

    | %         | root          |

    | localhost | mysql.session |

    | localhost | mysql.sys     |

    +-----------+---------------+

    3 rows in set (0.00 sec)

     

    设置大小写不敏感:

    mysql> show variables like '%case%';

    +------------------------+-------+

    | Variable_name          | Value |

    +------------------------+-------+

    | lower_case_file_system | OFF   |

    | lower_case_table_names | 1     |

    +------------------------+-------+

     

    注意:lower_case_table_names=1,参数为静态参数,需要在my.cnf配置后进去重启生效。

     

     mysql> grant all privileges  on *.* to root@'%' identified by "password";    --windows 只允许本地访问,需要给root赋权
    Query OK, 0 rows affected (0.00 sec)

     

    binlog2sql 工具的安装。

  • 相关阅读:
    【OpenCV入门指南】第一篇 安装OpenCV
    java.lang.Math中的基本方法
    padding与margin的差别
    怎样做到从程序猿到管理者的跳跃
    秒杀多线程第四篇 一个经典的多线程同步问题
    NETSH WINSOCK RESET这条命令的含义和作用?
    如何在windows系统自带命令查看硬件信息?
    centos6.5 无线网卡配置
    ctagst简单应用,将Vim改造:Ctags,Taglist,Cscope,OmniCppComplete,SuperTab,Winmanager,NERDTree,MiniBufExplorer,vimrc
    lsof 拥有更多的功能
  • 原文地址:https://www.cnblogs.com/hmwh/p/9011377.html
Copyright © 2011-2022 走看看