Mysql5.7编译安装

终于把最后几台服务器全部都从centos6 全部都升级到了centos7,虽说有不少运维脚本得重写,总体来说是值得得。

之前服务器上部署得都是mysql5.5,今天也准备升级到5.7。
编译mysql比较花费时间,也可以静下心来写写博客了。

1.准备工作
首先需要准备mysql的源码包,最新版本是5.7.12
下载地址为:
wget https://downloads.mysql.com/archives/get/file/mysql-5.7.20.tar.gz

同时,mysql 5.7需要boost 1.59以及以上版本,需要在sourceforge上下载。地址为:
http://www.boost.org/users/download/

安装之前最好检查一下是否已安装了mysql和boost

rpm -qa | grep mysql    //查看系统自带mysql
yum -y remove mysql-*   //卸载mysql
rpm -e --nodeps mysql-5.1.73-3.el6_5.x86_64 //卸载mysql
  • 1
  • 2
  • 3
rpm -qa | grep boost    //查看系统自带boost
yum -y remove boost-*   //卸载boost
rpm -e --nodeps boost-filesystem-1.41.0-11.el6_1.2.x86_64 //卸载boost
  • 1
  • 2
  • 3

然后安装其它得依赖包:

yum install gcc gcc-c++ ncurses ncurses-devel bison libgcrypt perl cmake
  • 1

2.准备安装
首先将boost库解压出来

tar -zxvf boost_1_59_0.tar.gz
  • 1

然后拷贝到一个目录中

mv boost_1_59_0 /usr/local/boost
  • 1

然后创建用户组以及用户

cat /etc/group | grep mysql     //查看是否存在mysql用户组
cat /etc/passwd | grep mysql    //查看是否存在mysql用户
groupadd mysql                  //创建用户组
useradd -r -g mysql mysql       //创建用户
  • 1
  • 2
  • 3
  • 4

上面得工作完成以后,就可以开始编译mysql了,当然,先将mysql的源码解压出来:

tar xzvf mysql-5.7.12.tar.gz 
cd mysql-5.7.12
  • 1
  • 2

使用cmake和make命令来进行编译

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost

make
  • 1
  • 2
  • 3

编译会消耗较多的时间,期间可以喝杯茶,或者来创建几个目录,因为我们指定编译参数得时候,指定了mysql得数据存储的目录,因此,这个时候可以先把目录都创建出来:

mkdir /usr/local/mysql 
mkdir /usr/local/mysql/data
mkdir /usr/local/mysql/logs
mkdir /usr/local/mysql/pids
  • 1
  • 2
  • 3
  • 4

最后还有重要得一步,需要将目录得所有权交给mysql用户

chown -R mysql:mysql /usr/local/mysql  //需要root权限
  • 1

编译的过程太漫长,上一张正在编译的图:
编译进行中

编译完成后执行make install 安装即可
随后,我们需要配置/etc/my.cnf文件:

vim /etc/my.cnf                                          
  • 1

然后写入参数,最终如下;

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/pids/mysqld.pid                                       
  • 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

3.性能调优
由于编译的时间是在太长了,这个地方的性能调优不涉及任何的sql优化,只针对一点:使用jemalloc来替换默认的内存管理
首先我们需要从网站上下载jemalloc,官网地址:
http://www.canonware.com/jemalloc/

从github上可以下载最新的源码:
https://github.com/jemalloc/jemalloc/releases

编译jemalloc:

./configure --libdir=/usr/local/lib
make
make install
  • 1
  • 2
  • 3

为了保证能够找到jemalloc库,我们需要设置一下库路径,

echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
ldconfig //执行这个命令可以刷新库路径
  • 1
  • 2

我们有两种方式来使用jemalloc来优化mysql
在编译的时候加入参数:

-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" -DWITH_SAFEMALLOC=OFF
  • 1

然后重新编译一遍。
也可以修改 /usr/local/mysql/bin/mysqld_safe
在# executing mysqld_safe 下面加上

LD_PRELOAD=/usr/local/lib/libjemalloc.so
  • 1

4.其它配置
通常我们需要重启服务器,最好在重启服务器的时候就启动mysql

cp support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld //需要root权限
  • 1
  • 2

然后将mysql添加到环境变量,修改/etc/profile文件

vim /etc/profile   //需要root
//在文件的最后面加入
#mysql path
export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
  • 1
  • 2
  • 3
  • 4

最后执行 source /etc/profile

随后我们也需要多数据库进行初始化操作。自 mysql5.7 开始,初始化系统表不再使用 mysql_install_db 工具, 而是使用 mysqld –initialize-insecure –user=mysql , 其中 –initialize 表示默认生成一个安全的密码, –initialize-insecure 表示不生成密码, 密码为空

进入安装好的目录mysql/bin下执行:mysqld --initialize --user=mysql --explicit_defaults_for_timestamp --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data该信息是老的不用了
#mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
  • 1

现在可以启动mysql 服务器:

chkconfig mysqld on

注意:实在是坑,就直接删除my.cnf 文件重起mysql
    • 1、[root@lam7 opt]# mysql
      ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

      2、[root@lam7 opt]# mysql -h localhost
      ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    • 报上面的错执行:
    • 1、直接使用“mysql”命令,不带主机名参数;
    • 2、使用带了主机名“localhost”参数的“mysql -h localhost”命令;
    • 3、使用带了主机名“127.0.0.1”参数的“mysql -h 127.0.0.1”命令。
    • 即可进入mysql;
    注意:进入了以后设置密码了以后,要这样进:mysql -h 127.0.0.1 -uroot -p  换行输入密码即可;

     

     

  • 启动数据库:
    sudo /etc/init.d/mysql restart
  •  


    [root@lam7 opt]# mysql -h 127.0.0.1  (用此方法是可以进入到MariaDB ,可以进入之后忽略此问题)

最后我们将root密码修改一下:

mysql -u root
mysql> use mysql;
mysql>update user set authentication_string=password('123456') where user='root' and Host = 'localhost';
远程第三方链接执行:
执行update user set host = '%' where user = 'root';这一句执行完可能会报错,不用管它。

执行FLUSH PRIVILEGES;
 mysql> FLUSH PRIVILEGES;

你可能感兴趣的:(mysql,服务器环境安装,mysql,5.7编译安装)