在 CentOS6 上编译安装 MySQL 5.7.18。
CentOS 版本:6.7 x86_64
MySQL 版本:5.7.18
安装编译 MySQL 安装编译所需依赖包
1 2 3 4 5 6 7 cd /etc/yum.repos.drename .repo .bak *.repo wget http://mirrors.163.com/.help/CentOS6-Base-163.repo sed -i 's@^exclude@#exclude@' /etc/yum.conf yum clean all yum makecache yum -y install wget gcc gcc-c++ ncurses ncurses-devel openssl openssl-devel cmake make perl bison autoconf
安装 jemalloc 4.5.0
1 2 3 4 5 6 7 8 9 cd wget https://github.com/jemalloc/jemalloc/archive/4.5.0.tar.gz tar xvf 4.5.0.tar.gz cd jemalloc-4.5.0./autogen.sh make && make install_bin install_include install_lib ln -s /usr/local/lib/libjemalloc.so.2 /usr/lib64/libjemalloc.so.1echo '/usr/local/lib' > /etc/ld.so.conf.d/local.confldconfig
解压 MySQL
1 2 3 4 cd wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-boost-5.7.18.tar.gz tar xvf mysql-boost-5.7.18.tar.gz cd mysql-5.7.18
添加 MySQL 用户
1 2 groupadd mysql useradd -r -g mysql -s /bin/false mysql
编译安装 MySQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/home/mysql/data \ -DWITH_BOOST=/root/mysql-5.7.18/boost/boost_1_59_0 \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_SSL=system \ -DENABLED_LOCAL_INFILE=1 \ -DMYSQL_UNIX_ADDR=/home/mysql/data/mysql.sock \ -DMYSQL_TCP_PORT=3306 \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DCMAKE_EXE_LINKER_FLAGS='-ljemalloc' make make install
配置初始化 MySQL 添加 MySQL 环境变量
1 2 echo "export PATH=/usr/local/mysql/bin:$PATH " >> /etc/profilesource /etc/profile
添加目录权限
1 2 3 chown -R mysql:mysql /usr/local/mysqlmkdir -p /home/mysql/data /home/mysql/bin-log /home/mysql/relay-log /home/mysql/logchown -R mysql:mysql /home/mysql
初始化数据库
1 mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql/data
配置 MySQL 服务
1 2 3 4 5 6 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldsed -i "s@^basedir=.*@basedir=/usr/local/mysql@" /etc/init.d/mysqld sed -i "s@^datadir=.*@datadir=/home/mysql/data@" /etc/init.d/mysqld chmod +x /etc/init.d/mysqldchkconfig --add mysqld chkconfig mysqld on
添加 MySQL 配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 cat > /etc/my.cnf << EOF [client] port = 3306 default-character-set = utf8 socket = /home/mysql/data/mysql.sock [mysql] port = 3306 default-character-set = utf8 socket = /home/mysql/data/mysql.sock prompt = 'MySQL[\\u@\\d]> ' no-auto-rehash [mysqld] # GENERAL # user = mysql default-storage-engine = InnoDB socket = /home/mysql/data/mysql.sock pid-file = /home/mysql/data/mysql.pid character-set-server = utf8 port = 3306 # MyISAM # key-buffer-size = 32M # SAFETY # max-allowed-packet = 1024M max-connect-errors = 1000000 # DATA STORAGE # basedir = /usr/local/mysql datadir = /home/mysql/data # BINARY LOGGING # server_id = 1 #log-bin = /home/mysql/bin-log #expire-logs-days = 3 sync-binlog = 1 relay_log_recovery = 1 relay-log = /home/mysql/relay-log binlog_format = row # CACHES AND LIMITS # tmp-table-size = 32M max-heap-table-size = 32M query-cache-type = 0 query-cache-size = 0 max-connections = 500 thread-cache-size = 50 open-files-limit = 65535 table-definition-cache = 1024 table-open-cache = 2048 # INNODB # innodb-flush-method = O_DIRECT innodb-log-files-in-group = 2 innodb-log-file-size = 128M innodb-flush-log-at-trx-commit = 1 innodb-file-per-table = 1 innodb-buffer-pool-size = 1G innodb_buffer_pool_instances = 1 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links = 0 sql-mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" skip-name-resolve skip-external-locking init-connect = 'SET NAMES utf8' # LOGGING # log-error = /home/mysql/log/error.log log-queries-not-using-indexes = 1 #slow-query-log = 1 #slow-query-log-file = /home/mysql/log/slow.log #general-log = 1 #general_log_file = /home/mysql/log/general.log #long_query_time = 3 log_timestamps = system [mysqld_safe] log-error = /home/mysql/log/error.log socket = /home/mysql/data/mysql.sock pid-file = /home/mysql/data/mysql.pid nice = 0 [mysqldump] socket = /home/mysql/data/mysql.sock quick max_allowed_packet = 1024M [myisamchk] key_buffer_size = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout [mysqld_multi] mysqld = /usr/local/mysql/bin/mysqld_safe mysqladmin = /usr/local/mysql/bin/mysqladmin log = /home/mysql/log/mysqld_multi.log EOF
创建日志文件
1 2 touch /home/mysql/log/error.logchown mysql:mysql /home/mysql/log/error.log
启动 MySQL
修改 root 密码
1 2 3 mysql -uroot -p alter user 'root' @'localhost' identified by 'password' ; grant all privileges on *.* to 'root' @'127.0.0.1' identified by 'password' with grant option;
运行安全设置脚本
1 mysql_secure_installation --no-defaults
参考