zoukankan      html  css  js  c++  java
  • MySQL 系列(一)安装

    MySQL 系列(一)安装

    以 Centos7 下安装 MySQL 5.6 为例。

    一、环境准备

    (1) 下载

    下载地址: https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz

    (2) 安装依赖

    yum -y install perl perl-devel autoconf libaio
    

    (3) 卸载已安装的 MySQL

    yum list installed | grep mysql  # 查询已安装的 MySQL
    yum -y remove mysql-libs.x86_64  # 卸载 
    

    (4) 创建 mysql 用户

    userdel mysql           # 删除 mysql 用户
    groupdel mysql          # 删除 mysql 用户组
    groupadd mysql          # 创建 mysql 用户组
    useradd -g mysql mysql  # 创建 mysql 用户并加入 mysql 用户组
    echo mysql | passwd --stdin mysql            # mysq 添加密码
    

    (5) sudo 免密码操作

    visudo
    
    %wheel  ALL=(ALL)         NOPASSWD: ALL
    
    # 用户加入 wheel 组
    gpasswd -a mysql wheel
    

    二、MySQL 安装

    (1) 切换到 mysql 帐号

    # 切换到 mysql 帐号
    su - mysql
    

    (2) 将下载的二进制安装包解压后放到 /usr/local/mysql 目录下

    sudo tar -zxvf mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz
    sudo mv mysql-5.6.38-linux-glibc2.12-x86_64 /usr/local/mysql
    

    (3) 环境变量

    sudo vim /etc/profile
    
    export MYSQL_HOME=/usr/local/mysql
    export PATH=$PATH:$MYSQL_HOME/bin
    
    source /etc/profile     # 立即生效
    

    (4) 在 etc 下新建配置文件 my.cnf

    [mysql]
    # 设置mysql客户端默认字符集
    default-character-set=utf8 
    socket=/var/lib/mysql/mysql.sock
    
    [mysqld]
    user=mysql
    skip-name-resolve
    #设置3306端口
    port = 3306 
    socket=/var/lib/mysql/mysql.sock
    # 设置mysql的安装目录
    basedir=/usr/local/mysql
    # 设置mysql数据库的数据的存放目录
    datadir=/usr/local/mysql/data
    # 允许最大连接数
    max_connections=200
    # 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB 
    lower_case_table_names=1
    max_allowed_packet=16M
    

    说明:

    • 使用 mysqld --help -vv | grep my.cnf 查看 mysql 的配置文件读取顺序。

      [root@binarylei mysql]# mysql --help --vv | grep my.cnf
                            order of preference, my.cnf, $MYSQL_TCP_PORT,
      /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf /usr/local/mysql/my.cnf ~/.my.cnf 
      
    • 后读取的 my.cnf 中的配置,如果有相同项,会覆盖之前的配置。

    • 使用 --defaults-files 可指定配置文件。

    (5) 创建 /var/lib/mysql 并将用户修改为 mysql

    # my.cnf 文件中配制的 socket 目录
    sudo mkdir /var/lib/mysql
    sudo chown -R mysql:mysql /var/lib/mysql
    

    (6) 初始化 MySQL

    # 一定要在 mysql 的安装目录下
    ./scripts/mysql_install_db --user=mysql
    

    到此 MySQL 安装完毕!下面介绍 MySQL 作为服务启动方式。

    三、MySQL 启动

    1、添加mysql服务开机自启动

    sudo cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld    # 复制启动脚本到资源目录
    sudo chmod +x /etc/rc.d/init.d/mysqld    # 增加 mysqld 服务控制脚本执行权限
    sudo chkconfig --add mysqld              # 将 mysqld 服务加入到系统服务
    sudo chkconfig --list mysqld             # 检查 mysqld 服务是否已经生效
    

    命令输出类似下面的结果:

    mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
    

    表明 mysqld 服务已经生效,在2、3、4、5运行级别随系统启动而自动启动,以后可以使用 service 命令控制 mysql 的启动和停止。

    2、启动msql

    service mysqld start    # 启动 msql
    service mysqld stop     # 停止msql
    

    MySQL 启动后后有两个进程,其中 mysqld_safe 为守护进程,当 MySQL 异常关闭时会重新拉起 mysqld 进程。

    root     22513     1  0 Jan04 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/binarylei.pid
    mysql    22824 22513  0 Jan04 ?        00:00:45 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=binarylei.err --pid-file=/usr/local/mysql/data/binarylei.pid --socket=/var/lib/mysql/mysql.sock
    

    四、权限控制

    (1) 设置 mysql 帐号和密码

    以 root 账户登陆 mysql,默认是没有密码

    UPDATE mysql.user SET password=password('123456') WHERE user='root' AND host='localhost';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

    (2) 去除匿名用户

    delete from mysql.user where User='';   # 删除匿名用户,使用root用户登录数据库
    flush privileges;
    

    五、MySQL 升级

    以 MySQL5.6 -> 5.7 为例。如果不是跨很大的版本,通常不用 mysqldump 备份数据,直接使用 mysql_upgrade 进行升级。mysql_upgrade 建议使用 -s 参数,只升级系统表,不用升级数据表,因为如果数据量很大,会导致升级非常慢。

    注意: 升级前后 my.cnf 中的配置项 datadir 参数相同。

    # 更新 MySQL 软件包,直接将 mysql 软链接由 mysql-5.6 指向 mysql-5.7
    service mysqld stop
    unlink /usr/local/mysql
    ln -sv /usr/local/lib/mysql-5.7 /usr/local/mysql
    service mysqld start
    
    # -s表示只升级系统表,通常情况下不用升级数据表 --force表示已经升级了
    mysql_upgrade -s --force
    
    mysql_upgrade -h
    -f, --force         Force execution of mysqlcheck even if mysql_upgrade has
                        already been executed for the current version of MySQL.
    -s, --upgrade-system-tables 
                        Only upgrade the system tables do not try to upgrade the data.
    

    六、错误处理

    MySQL 日志存储目录: my.cnf 中配制了 datadir 目录,如 datadir=/usr/local/mysql/data,在 datadir 目录下会新建一个 “主机名.err” 的文件

    (1) 问题 1:Can't connect to local MySQL server through socket '/tmp/mysql.sock'

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    

    解决方法:

    打开 /etc/my.cnf,看看里面配置的 socket 位置是什么目录,如 socket=/var/lib/mysql/mysql.sock

    MySQL 服务端启动时报错,则很可能是 mysql 用户没有操作 /var/lib/mysql 的权限。一般将 /var/lib/mysql 用户修改为 mysql 用户可以解决问题。

    chown -R mysql:mysql /var/lib/mysql
    

    MySQL 客户端连接时报错,则很可能是 socket 路径和 “/tmp/mysql.sock” 不一致。建立一个软连接:

    ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
    

    七、附录

    附录1:MySQL 5.6.X 安装:

    shell> yum install libaio # Debain系用户:apt-get install libaio1
    shell> groupadd mysql
    shell> useradd -r -g mysql mysql
    shell> cd /usr/local
    shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
    shell> ln -s full-path-to-mysql-VERSION-OS mysql
    shell> cd mysql
    shell> chown -R mysql .
    shell> chgrp -R mysql .
    shell> scripts/mysql_install_db --user=mysql
    shell> chown -R root .
    shell> chown -R mysql data
    shell> bin/mysqld_safe --user=mysql &
    # Next command is optional
    shell> cp support-files/mysql.server /etc/init.d/mysql.server 
    

    附录2:MySQL 5.7.X 安装

    shell> groupadd mysql
    shell> useradd -r -g mysql mysql
    shell> cd /usr/local
    shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
    shell> ln -s full-path-to-mysql-VERSION-OS mysql
    shell> cd mysql
    shell> mkdir mysql-files
    shell> chmod 770 mysql-files
    shell> chown -R mysql .
    shell> chgrp -R mysql .
    shell> bin/mysqld --initialize --user=mysql #该步骤中会产生零时
                                                #root@localhost密码
                                                #需要自己记录下来
    shell> bin/mysql_ssl_rsa_setup          
    shell> chown -R root .
    shell> chown -R mysql data mysql-files
    shell> bin/mysqld_safe --user=mysql &
    # Next command is optional
    shell> cp support-files/mysql.server /etc/init.d/mysql.server
    

    附录3:my.ini 生产环境参考配置

    [client]
    user=root
    password=12346
    
    [mysqld]
    ########basic settings########
    server-id = 11 
    port = 3306
    user = mysql
    bind_address = 10.166.224.32   #根据实际情况修改
    autocommit = 0   #5.6.X安装时,需要注释掉,安装完成后再打开
    character_set_server=utf8mb4
    skip_name_resolve = 1
    max_connections = 800
    max_connect_errors = 1000
    datadir = /data/mysql_data      #根据实际情况修改,建议和程序分离存放
    transaction_isolation = READ-COMMITTED
    explicit_defaults_for_timestamp = 1
    join_buffer_size = 134217728
    tmp_table_size = 67108864
    tmpdir = /tmp
    max_allowed_packet = 16777216
    sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
    interactive_timeout = 1800
    wait_timeout = 1800
    read_buffer_size = 16777216
    read_rnd_buffer_size = 33554432
    sort_buffer_size = 33554432
    ########log settings########
    log_error = error.log
    slow_query_log = 1
    slow_query_log_file = slow.log
    log_queries_not_using_indexes = 1
    log_slow_admin_statements = 1
    log_slow_slave_statements = 1
    log_throttle_queries_not_using_indexes = 10
    expire_logs_days = 90
    long_query_time = 2
    min_examined_row_limit = 100
    ########replication settings########
    master_info_repository = TABLE
    relay_log_info_repository = TABLE
    log_bin = bin.log
    sync_binlog = 1
    gtid_mode = on
    enforce_gtid_consistency = 1
    log_slave_updates
    binlog_format = row 
    relay_log = relay.log
    relay_log_recovery = 1
    binlog_gtid_simple_recovery = 1
    slave_skip_errors = ddl_exist_errors
    ########innodb settings########
    innodb_page_size = 8192
    innodb_buffer_pool_size = 6G    #根据实际情况修改
    innodb_buffer_pool_instances = 8
    innodb_buffer_pool_load_at_startup = 1
    innodb_buffer_pool_dump_at_shutdown = 1
    innodb_lru_scan_depth = 2000
    innodb_lock_wait_timeout = 5
    innodb_io_capacity = 4000
    innodb_io_capacity_max = 8000
    innodb_flush_method = O_DIRECT
    innodb_file_format = Barracuda
    innodb_file_format_max = Barracuda
    innodb_log_group_home_dir = /redolog/  #根据实际情况修改
    innodb_undo_directory = /undolog/      #根据实际情况修改
    innodb_undo_logs = 128
    innodb_undo_tablespaces = 3
    innodb_flush_neighbors = 1
    innodb_log_file_size = 4G               #根据实际情况修改
    innodb_log_buffer_size = 16777216
    innodb_purge_threads = 4
    innodb_large_prefix = 1
    innodb_thread_concurrency = 64
    innodb_print_all_deadlocks = 1
    innodb_strict_mode = 1
    innodb_sort_buffer_size = 67108864 
    ########semi sync replication settings########
    plugin_dir=/usr/local/mysql/lib/plugin      #根据实际情况修改
    plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
    loose_rpl_semi_sync_master_enabled = 1
    loose_rpl_semi_sync_slave_enabled = 1
    loose_rpl_semi_sync_master_timeout = 5000
    
    [mysqld-5.7]
    innodb_buffer_pool_dump_pct = 40
    innodb_page_cleaners = 4
    innodb_undo_log_truncate = 1
    innodb_max_undo_log_size = 2G
    innodb_purge_rseg_truncate_frequency = 128
    binlog_gtid_simple_recovery=1
    log_timestamps=system
    transaction_write_set_extraction=MURMUR32
    show_compatibility_56=on
    

    几个重要的参数配置和说明:

    • innodb_log_file_size = 4G :做实验可以更改的小点,线上环境推荐用 4G,以前 5.5 和 5.1 等版本之所以官方给的值很小,是因为太大后有 bug,现在 bug 已经修复。

    • innodb_undo_logs = 128innodb_undo_tablespaces = 3 建议在安装之前就确定好该值,后续修改比较麻烦。

    • [mysqld][mysqld-5.7]这种 tag 表明了下面的配置在什么版本下才生效,[mysqld]下均生效。

    • autocommit,这个参数在 5.5.x 以后才有,安装 5.6.x 的时候要注意先把该参数注释掉,等安装完成后,再行打开, 5.7.X 无需预先注释。

    • datadir, innodb_log_group_home_dir, innodb_undo_directory 一定要注意他的权限是 mysql:mysql


    每天用心记录一点点。内容也许不重要,但习惯很重要!

  • 相关阅读:
    并发量,tps,qps
    MYSQL安装和配置
    python 生成随机数的几种方法
    python 判断是字母的多种方法
    python实战,
    linux工作常用命令
    apache http server安装
    .py与.pyc文件区别
    上传本地文件到linux
    ms
  • 原文地址:https://www.cnblogs.com/binarylei/p/9026422.html
Copyright © 2011-2022 走看看