mariadb安装和多实例配置,MySQL数据库基于Centos柒

数据库

一、MySQL数据库的合法兰西网球邀请赛(French Open)址:

  • https://www.oracle.com/
  • http://dev.mysql.com/doc/refman/5.7/en/linux-installation.html
  •      
     //不一样版本的安装文书档案和下载能够在此地找

正文介绍mysql各类安装格局(rpm/glibc通用2进制/源码编写翻译)以及多实例配置的方法,没什么手艺,算是1篇方法归总作品。

本文目录:
一.
mysql单实例安装
  1.1
rpm安装mysql
  1.2通用2进制包安装mysql
    1.二.1开始化数据库
    一.2.2安装后的标准化操作
  一.三编写翻译安装
    壹.三.一编写翻译安装进程
    1.3.2
初始化
    1.3.3
规范化
    一.三.4cmake编写翻译MySQL时的精选表明
2.
mysql多实例配置
  二.1mysql多实例配置进度
  贰.贰提供sysV服务管理脚本
  二.3提供systemd服务管理脚本
3.
mariadb安装

二、MySQL的设置格局:

以下是MySQL常见的二种安装形式:

  • 二进制  rpm   Yum Repository   
    mysql57-community-release-el7-9.noarch.rpm
  • 二进制  预编译  Generic                       
    mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
  • 源码包安             Source Code              
     
    mysql-5.7.19.tar.gz
  1. 本文的装置情状为centos陆.陆和centos七.二,但大部分地点都是centos6.六作为示范示例。
  2. 本文安装MySQL时,它们的周转地点为mysql,数据目录datadir为/mydata/data。
  3. pid文件路线设置为/mydata/data/mysql.pid或/mydata/data/`hostname`.pid。
  4. 鉴于mariadb和mysql
    5层层并从未太大的不等。因而仅详细突显mysql的安装。最终将轻便提一提mariadb。

  5. mysql单实例安装

本文介绍mysql种种安装方式(rpm/glibc通用二进制/源码编写翻译)以及多实例配置的格局,没什么技艺,算是一篇方法归总作品。

叁、Yum的点子安装MySQL:

  • yum安装mysql 5.7的官方安装方式地址

1、下载安装包

  • *此地址为Mysql 八.0 的安装源当中饱含MySQL
    五.⑦的源,能够在背后步骤修改开放的仓库:
     *

贰、 设置安装起来环境

暂时先把防火墙关闭保证实验顺利:
[root@host-131 ~]# systemctl stop firewalld 
[root@host-131 ~]# systemctl disable firewalld.service
临时关闭SELlinux:
[root@host-131 ~]# setenforce 0
永久关闭SELinux:
[root@host-131 ~]# sed -ri '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config
查看SELinux状态:
[root@host-131 ~]# getenforce
Disabled

 三、卸载系统自带的数据库(Centos七自带的是maridb)

1.1 rpm包安装mysql

间接yum安装mysql-server就可以。但注意两点:

(一).centos七上,yum暗中认可将安装mariadb。
(贰).centos6上,yum默许安装的本子相比较老(5.一版),要安装mysql 五.6或mysql
伍.七,能够从官方下载,也得以选取以下配置的yum源。

release=`awk  -F "[ .]" '{print $4}' /etc/redhat-release`
cat <<eof>/etc/yum.repos.d/mysql.repo
[mysql56]
name=MySQL
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/$release/\$basearch/
enabled=1
gpgcheck=0

[mysql57]
name=MySQL
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/$release/\$basearch/
enabled=1
gpgcheck=0
eof

其余,在sohu镜像站点也提供了mysql的相继rpm版本。地址:http://mirrors.sohu.com/mysql/

还需注意,配置了yum源后安装Mysql将利用mysql-community-*安装各mysql相关包,例如mysql-community-server。

安装完毕后,运转mysqld。

shell> service mysqld start      # 或 systemctl start mysqld

1旦开行败北,则只怕需求初始化MySQL。

shell> mkdir -p /mydata/data
shell> chown -R mysql.mysql /mydata/data
shell> mysql_install_db --datadir=/mydata/data --user=mysql

若果选取mysql_install_db初始化时提醒该命令已经抛弃(五.柒版本大概会这么提醒),那么使用下边包车型大巴下令进行开头化。

# 初始化时,为root@localhost创建一个临时密码存放在mysql.log中
shell> mysqld --initialize --datadir=/mydata/data --user=mysql
# 初始化时,为root@localhost创建一个空密码
shell> mysqld --initialize-insecure --datadir=/mydata/data --user=mysql

初阶化后再开发银行,运维成功后总是数据库并修改root@localhost用户的密码,然后退出。

shell> mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
mysql> \q

倘使前边使用mysqld --initialize起头化数据库,那么将会为”root@localhost”成立2个密码,那将使得不或然直接利用mysql指令连接数据库。能够先从mysql.log中筛选出创造的权且密码,然后再手动修改为”12345陆”。

shell> grep 'temporary password' /var/log/mysqld.log
shell> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
mysql> \q
  1. 本文的设置情状为centos陆.陆和centos七.2,但诸多地方都是centos陆.6作为示范示例。
  2. 本文安装MySQL时,它们的运转地点为mysql,数据目录datadir为/mydata/data。
  3. pid文件路线设置为/mydata/data/mysql.pid或/mydata/data/`hostname`.pid。
  4. 出于mariadb和mysql
    五种类并不曾太大的例外。由此仅详细体现mysql的设置。最终将简单提壹提mariadb。

  5. mysql单实例安装

可参考:【MySQL解惑笔记】Centos7下卸载通透到底MySQL数据库

卸载maridb:
[root@host-131 ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.52-1.el7.x86_64
[root@host-131 ~]# yum -y remove mari*
[root@host-131 ~]# rm -rf /var/lib/mysql/*
[root@host-131 ~]# rpm -qa | grep mariadb
[root@host-131 ~]# 

肆、修改旅舍

[root@host-131 src]# yum rpolist all |grep mysql      //查看所有仓库,并能够看到开启和禁用的仓库
[root@host-131 src]# yum repolist enabled | grep "mysql.*-community.*"  //查看所有开启的仓库,发现现在开启的是MySQL 8.0的,我们需要开启MySQL5.7的仓库
mysql-connectors-community/x86_64 MySQL Connectors Community                  51
mysql-tools-community/x86_64      MySQL Tools Community                       63
mysql80-community/x86_64          MySQL 8.0 Community Server                  17     //k

 开启和关闭不同仓库,官方提供了三种修改方法:

方法一:
shell> sudo yum-config-manager --disable mysql80-community
shell> sudo yum-config-manager --enable mysql57-community

方法二:
shell> sudo dnf config-manager --disable mysql57-community
shell> sudo dnf config-manager --enable mysql56-community

方法三:
我们直接修改Yum源文件:
[root@host-131 ~]# cd /etc/yum.repos.d 
[root@host-131 yum.repos.d]# vim mysql-community.repo 
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=1                        //修改为1表示开启
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=0                        //修改为0表示关闭
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[root@host-131 yum.repos.d]# yum repolist enabled | grep "mysql.*-community.*"
mysql-connectors-community/x86_64 MySQL Connectors Community                  51
mysql-tools-community/x86_64      MySQL Tools Community                       63
mysql57-community/x86_64          MySQL 5.7 Community Server                 267    //可以看到5.7存储仓库已经开启

注意:我们应该在任何时候只启用一个发布系列的子存储库。当启用多个发布系列的子存储库时,Yum将使用最新的系列。
通过运行以下命令并检查其输出(对于Fedora,用dnf替换yum),验证是否启用了正确的子库并禁用了它:
[root@host-131 yum.repos.d]# yum repolist enabled | grep mysql
mysql-connectors-community/x86_64 MySQL Connectors Community                  51
mysql-tools-community/x86_64      MySQL Tools Community                       63
mysql57-community/x86_64          MySQL 5.7 Community Server                 267

 5、安装MySQL数据库

[root@host-131 yum.repos.d]# yum -y install mysql-community-server
[root@host-131 ~]# systemctl start mysqld   
[root@host-131 ~]# systemctl enable mysqld   设置开机自启动
[root@host-131 ~]# systemctl status mysqld  查看mysql启动状态

[root@host-131 ~]# ls /var/lib/mysql    (安装后可以看到初始化的数据库)
auto.cnf    client-cert.pem  ibdata1      ibtmp1      mysql.sock.lock     public_key.pem   sys
ca-key.pem  client-key.pem   ib_logfile0  mysql   performance_schema  server-cert.pem
ca.pem      ib_buffer_pool   ib_logfile1  mysql.sock  private_key.pem     server-key.pem

6、第三次登入数据库,并安装开始化密码

[root@host-131 ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
发现是禁止访问的

在服务器的初始启动时,由于服务器的数据目录为空:服务器初始化。SSL证书和密钥文件是在数据目录中生成的。
安装并启用了validate_password。
一个超级用户帐户'root'@'localhost被创建。
超级用户的密码被设置并存储在错误日志文件中。要显示它,请使用以下命令:

MySQL5.5之前版本安装后可以直接登录
MySQL5.5自动生成的密码是空的
MySQL5.6是将密码放在root下的
MySQL5.7是将密码放在:
[root@host-131 ~]# grep 'temporary password' /var/log/mysqld.log
2018-05-30T06:34:56.956716Z 1 [Note] A temporary password is generated for root@localhost: xt8S3rWXOL/C
[root@host-131 ~]# 
[root@host-131 ~]# mysql -uroot -p"xt8S3rWXOL/C"
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.22
修改密码:
方法一:
[root@host-131 ~]# mysqladmin -uroot -p"xt8S3rWXOL/C" password "Yanglt123."   //密码要满足复杂性要求
[root@host-131 ~]# mysql -uroot -p"Yanglt123."

方法二:

[root@host-131 ~]# grep 'temporary password' /var/log/mysqld.log
2018-05-30T06:34:56.956716Z 1 [Note] A temporary password is generated for root@localhost: xt8S3rWXOL/C
[root@host-131 ~]# 
[root@host-131 ~]# mysql -uroot -p"xt8S3rWXOL/C"

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

 到此数据库安装成功:

源码安装可参照小说:*【Linux运转】LNMP情形布置*

  

1.二 通用二进制包安装mysql

通用贰进制包相当于windows中的便携版软件,解压后有点配置下就能够一贯利用,不用安装。

mysql通用贰进制版官方下载地址:

  • MySQL 伍.陆通用贰进制包下载:
    https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.35-linux-glibc2.12-x86\_64.tar.gz
  • MySQL 伍.7通用二进制包下载:
    https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux-glibc2.12-x86\_64.tar.gz

当中文件中的glibc贰.1二象征的是Linux系统的glibc版本要比2.1二新,能够利用ldd --version查看glibc版本。在CentOS
陆上glibc暗中认可便是贰.1二的,所以不要思量。

shell> tar xf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
shell> ln -s /usr/local/mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql

1.1 rpm包安装mysql

直接yum安装mysql-server就可以。但注意两点:

(壹).centos七上,yum暗许将安装mariadb。
(2).centos陆上,yum私下认可安装的本子比较老(5.一版),要安装mysql 5.6或mysql
伍.七,能够从官方下载,也可以应用以下配置的yum源。

cat <<eof>/etc/yum.repos.d/mysql.repo
[mysql]
name=MySQL
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/\$basearch/
# baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/\$basearch/
# baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/\$basearch/
# baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/\$basearch/
enabled=1
gpgcheck=0
eof

其它,在sohu镜像站点也提供了mysql的1一rpm版本。地址:http://mirrors.sohu.com/mysql/

还需注意,配置了yum源后安装Mysql将选择mysql-community-*安装各mysql相关包,例如mysql-community-server。

安装到位后,运营mysqld。

shell> service mysqld start      # 或 systemctl start mysqld

假设开发银行退步,则也许必要初叶化MySQL。

shell> mkdir -p /mydata/data
shell> chown -R mysql.mysql /mydata/data
shell> mysql_install_db --datadir=/mydata/data --user=mysql

比如接纳mysql_install_db初叶化时提示该命令已经丢掉(5.7本子恐怕会那样提醒),那么使用上边的下令进行早先化。

# 初始化时,为root@localhost创建一个临时密码存放在mysql.log中
shell> mysqld --initialize --datadir=/mydata/data --user=mysql
# 初始化时,为root@localhost创建一个空密码
shell> mysqld --initialize-insecure --datadir=/mydata/data --user=mysql

开首化后再开发银行,运营成功后几次三番数据库并修改root@localhost用户的密码,然后退出。

shell> mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
mysql> \q

假如前面使用mysqld --initialize开头化数据库,那么将会为”root@localhost”创立1个密码,那将使得不可能直接运用mysql命令连接数据库。能够先从mysql.log中筛选出创设的权且密码,然后再手动修改为”123456″。

shell> grep 'temporary password' /var/log/mysqld.log
shell> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
mysql> \q

1.二.1 早先化数据库

不使用rpm包安装,就须求对mysql实行初始化以创办一些文本、库和点名一些参数。但在开首化mysql前,要优先做一些操作。

shell> mkdir -p /mydata/data
shell> useradd -r -s /sbin/nologin mysql
shell> chown -R mysql.mysql /usr/local/mysql
shell> chown -R mysql.mysql /mydata/data
shell> cd /usr/local/mysql
shell> scripts/mysql_install_db --datadir=/mydata/data --user=mysql
shell> chown -R root.root /usr/local/mysql

执行mysql_install_db时会在/tmp下创办临时表,所以mysql用户供给对/tmp有写权限,否则实施实例伊始化脚本时可能会报类似上边包车型地铁失实:
ERROR: 1 Can’t create/write to file ‘/tmp/#sql_7a0e_0.MYI’ (Errcode:
13)

那注脚未有写权限,所以要求修改/tmp目录的权柄:

chmod 1777 /tmp

同样,mysql_install_db开班时只要提醒已扬弃,则应用如下方法:

bin/mysqld --initialize-insecure --datadir=/mydata/data --user=mysql

起首化实现后,提供配置文件和服务运行脚本。

shell> cp -a support-files/mysql.server /etc/init.d/mysqld
shell> cp -a support-files/my-default.cnf /etc/my.cnf  

# 修改my.cnf的datadir
shell> vim /etc/my.cnf 
[mysqld]
datadir=/mydata/data

假使是centos7,则提供如下服务运转脚本(如有供给,修改pid文件路径)。

shell> cat /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=forking

PIDFile=/var/run/mysqld/mysqld.pid

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Start main service
ExecStart=/usr/local/mysql-5.7.19/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 5000

Restart=on-failure

RestartPreventExitStatus=1

PrivateTmp=false

修改”root@localhost”密码。

shell> mysql
mysql> alter user 'root'@'localhost' identified by '123456';
mysql> \q

壹.2 通用2进制包安装mysql

通用2进制包也就是windows中的便携版软件,解压后某个配置下就足以间接使用,不用安装。

mysql通用二进制版官方下载地址:

  • MySQL 五.⑥通用二进制包下载:
    https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.35-linux-glibc2.12-x86\_64.tar.gz
  • MySQL 5.七通用二进制包下载:
    https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux-glibc2.12-x86\_64.tar.gz

里面文件中的glibc2.12代表的是Linux系统的glibc版本要比二.1二新,能够应用ldd --version查阅glibc版本。在CentOS
6上glibc暗中同意正是二.12的,所以不用操心。

shell> tar xf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
shell> ln -s /usr/local/mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql

一.2.二 安装后的标准化操作

编写翻译安装或通用二进制安装后,一般都亟待做一些外加的操作,包蕴安装蒙受变量、输出头文件和库文件、设置man路线。

echo "export PATH=/usr/local/mysql/bin:$PATH" >/etc/profile.d/mysql.sh
chmod +x /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
echo "MANPATH /usr/local/mysql/man" >>/etc/man.config

echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf
ldconfig
ln -s /usr/local/mysql/include /usr/include/mysql

一.2.一 发轫化数据库

不行使rpm包安装,就必要对mysql举办开头化以创制一些文本、库和点名一些参数。但在开端化mysql前,要先行做一些操作。

shell> mkdir -p /mydata/data
shell> useradd -r -s /sbin/nologin mysql
shell> chown -R mysql.mysql /usr/local/mysql
shell> chown -R mysql.mysql /mydata/data
shell> cd /usr/local/mysql
shell> scripts/mysql_install_db --datadir=/mydata/data --user=mysql
shell> chown -R root.root /usr/local/mysql

执行mysql_install_db时会在/tmp下创办一时半刻表,所以mysql用户须求对/tmp有写权限,不然推行实例起头化脚本时可能会报类似上边包车型大巴不当:
ERROR: 1 Can’t create/write to file ‘/tmp/#sql_7a0e_0.MYI’ (Errcode:
13)

那表明未有写权限,所以要求修改/tmp目录的权杖:

chmod 1777 /tmp

同样,mysql_install_db始于时假使提醒已放任,则选拔如下方法:

bin/mysqld --initialize-insecure --datadir=/mydata/data --user=mysql

开头化实现后,提供配置文件和劳务运转脚本。

shell> cp -a support-files/mysql.server /etc/init.d/mysqld
shell> cp -a support-files/my-default.cnf /etc/my.cnf  

# 修改my.cnf的datadir
shell> vim /etc/my.cnf 
[mysqld]
datadir=/mydata/data

要是是centos柒,则提供如下服务运行脚本(如有须求,修改pid文件路线)。

shell> cat /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=forking

PIDFile=/var/run/mysqld/mysqld.pid

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Start main service
ExecStart=/usr/local/mysql-5.7.19/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 5000

Restart=on-failure

RestartPreventExitStatus=1

PrivateTmp=false

修改”root@localhost”密码。

shell> mysql
mysql> alter user 'root'@'localhost' identified by '123456';
mysql> \q

一.叁 编写翻译源码安装mysql

建议别没事找事,尝试编写翻译装MySQL,完全是吃力不讨好的事。借使确实要编写翻译安装,把my.cnf、服务管理脚本、编写翻译选项等涉及到运转文件路线的项保险同等,举例pid文件、socket文件、datadir路线、log文件。并确认保证mysql涉及到的目录全数者和所属组都以mysql,比方默许的pid路线/var/run/mysql/。

mysql源码包下载地址:

  • MySQL 伍.陆源码包下载:
    https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.37.tar.gz

  • MySQL 5.7源码包下载:
    https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19.tar.gz

一.二.二 安装后的规范化操作

编写翻译安装或通用二进制安装后,一般都亟待做一些外加的操作,包涵安装境况变量、输出头文件和库文件、设置man路线。

echo "export PATH=/usr/local/mysql/bin:$PATH" >/etc/profile.d/mysql.sh
chmod +x /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
echo "MANPATH /usr/local/mysql/man" >>/etc/man.config

echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf
ldconfig
ln -s /usr/local/mysql/include /usr/include/mysql

一.三.1 编写翻译安装进程

有关编写翻译选项,见下文。

采取以下命令安装mysql 5.陆。

yum -y install ncurses-devel cmake
tar xf ~/mysql-5.6.37.tar.gz
cd ~/mysql-5.6.37
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.37 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_SSL=bundled \
-DWITH_DEBUG=0 
make
make install

动用以下命令安装mysql
5.7。比上述多了最后二个boost相关设置项,不设置此项只怕会cmake失败。

yum -y install ncurses-devel cmake
tar xf ~/mysql-5.7.19.tar.gz
cd ~/mysql-5.7.19
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.19 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_SSL=bundled \
-DWITH_DEBUG=0 \
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost
make
make install

就算是centos7,则增加1项-DWITH_SYSTEMD=1,那会提供systemd脚本。

注意,上述编写翻译选项中从未提供sysconfdir、datadir、pidfile和socket等mysql运营时文件类设置选项。纵然能够安装,但没供给,而且在做多实例的时候大概见面世难点。可是,能够设想加上MYSQL_UNIX_ADDR项来设置socket路线,因为不安装的话其会动用私下认可的/tmp/mysql.sock。

1.三 编写翻译源码安装mysql

建议别没事找事,尝试编写翻译装MySQL,完全是吃力不讨好的事。假如实在要编写翻译安装,把my.cnf、服务处理脚本、编写翻译选项等关联到运维文件路线的项保证同等,举个例子pid文件、socket文件、datadir路径、log文件。并保管mysql涉及到的目录全部者和所属组都以mysql,举个例子默许的pid路线/var/run/mysql/。

mysql源码包下载地址:

  • MySQL 5.陆源码包下载:
    https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.37.tar.gz

  • MySQL 五.七源码包下载:
    https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19.tar.gz

1.3.2 初始化

shell> ln -s /usr/local/mysql-5.6.37 /usr/local/mysql
shell> cd /usr/local/mysql
shell> useradd -r -s /sbin/nologin mysql
shell> mkdir -p /mydata/data
shell> chown -R mysql.mysql /mydata/data
shell> chmod o-rx /mydata/data
shell> chown -R mysql.mysql /usr/local/mysql
shell> scripts/mysql_install_db --user=mysql --datadir=/mydata/data
shell> cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
shell> cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
shell> chown -R root.root /usr/local/mysql
# 修改my.cnf的datadir、socket、log和pid路径。
shell> vim /etc/my.cnf 
[mysqld]
datadir=/mydata/data
socket=/tmp/mysql.sock
[mysqld_safe]
log-error=/mydata/data/mysql.log
pid-file=/mydata/data/mysqld.pid

注:mysql 5.七提议采取如下语句举行起首化。

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

如果是centos7,则提供systemd风格的劳务管理脚本,并鲜明是或不是要修改pid文件路线。

一.三.壹 编写翻译安装进程

至于编写翻译选项,见下文。

应用以下命令安装mysql 五.6。

yum -y install ncurses-devel cmake
tar xf ~/mysql-5.6.37.tar.gz
cd ~/mysql-5.6.37
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.37 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_SSL=bundled \
-DWITH_DEBUG=0 
make
make install

运用以下命令安装mysql
伍.7。比上述多了最后一个boost相关设置项,不安装此项可能会cmake战败。

yum -y install ncurses-devel cmake
tar xf ~/mysql-5.7.19.tar.gz
cd ~/mysql-5.7.19
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.19 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_SSL=bundled \
-DWITH_DEBUG=0 \
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost
make
make install

假如是centos七,则增进一项-DWITH_SYSTEMD=1,那会提供systemd脚本。

专注,上述编写翻译选项中没有提供sysconfdir、datadir、pidfile和socket等mysql运营时文件类设置选项。就算能够设置,但没要求,而且在做多实例的时候可能会并发难题。可是,能够思念加上MYSQL_UNIX_ADDR项来设置socket路线,因为不安装的话其会动用暗中认可的/tmp/mysql.sock。

1.3.3 规范化

输出头文件、库文件,设置PATH情状变量,设置man路线。

echo "export PATH=/usr/local/mysql/bin:$PATH" >/etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
chmod +x /etc/profile.d/mysql.sh
echo "MANPATH /usr/local/mysql/man" >>/etc/man.config
echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf
ldconfig
ln -s /usr/local/mysql/include /usr/include/mysql

1.3.2 初始化

shell> ln -s /usr/local/mysql-5.6.37 /usr/local/mysql
shell> cd /usr/local/mysql
shell> useradd -r -s /sbin/nologin mysql
shell> mkdir -p /mydata/data
shell> chown -R mysql.mysql /mydata/data
shell> chmod o-rx /mydata/data
shell> chown -R mysql.mysql /usr/local/mysql
shell> scripts/mysql_install_db --user=mysql --datadir=/mydata/data
shell> cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
shell> cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
shell> chown -R root.root /usr/local/mysql
# 修改my.cnf的datadir、socket、log和pid路径。
shell> vim /etc/my.cnf 
[mysqld]
datadir=/mydata/data
socket=/tmp/mysql.sock
[mysqld_safe]
log-error=/mydata/data/mysql.log
pid-file=/mydata/data/mysqld.pid

注:mysql 伍.7建议利用如下语句举行开首化。

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

如果是centos7,则提供systemd风格的服务管理脚本,并确认是还是不是要修改pid文件路径。

1.叁.四 cmake编写翻译MySQL时的抉择表达

1.3.3 规范化

输出头文件、库文件,设置PATH遭受变量,设置man路径。

echo "export PATH=/usr/local/mysql/bin:$PATH" >/etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
chmod +x /etc/profile.d/mysql.sh
echo "MANPATH /usr/local/mysql/man" >>/etc/man.config
echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf
ldconfig
ln -s /usr/local/mysql/include /usr/include/mysql

Installation Layout Options

  • -DCMAKE_INSTALL_PREFIX=dir_name   # MySQL的装置地方
  • -DINSTALL_PLUGINDIR=dir_name      # 插件安装的目录
  • -DMYSQL_DATADIR=dir_name        # MySQL的data dir
  • -DSYSCONFDIR=dir_name        #
    MySQL暗中认可的安插文件(my.cnf)路径
  • -DTMPDIR=dir_name          #
    临时文件存放路线,在MySQL伍.6.1陆中才起来提供该选项

一.三.四 cmake编写翻译MySQL时的选项表达

Storage Engine Options

积累引擎是插件式的,可被静态编写翻译到MySQL服务中,也足以动态编写翻译成模块,编译成模块时需求使用INSTALL PLUGIN言辞大概--plugin-load慎选来启用。但一些插件是稳固的,无法钦点是静态编写翻译照旧动态编译。

InnoDB,MyISAM,ME普拉多GE,MEMO宝马7系Y和CSV存款和储蓄引擎总是私下认可静态编写翻译到MySQL服务中的,在编写翻译安装的时候无需显式钦定它们。

编写翻译存款和储蓄引擎的时候,使用-DWITH_enginename_STORAGE_ENGINE=1代表静态编写翻译到MySQL。可选的引擎有:A途观C尖锐湿疣E、BLACKHOLE、EXAMPLE、FEDERATED、PARTITION(分区帮忙引擎)、PE奥迪Q7FSCHEMA(Performance
Schema)。如:

-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1

使用-WITHOUT_enginename_STORAGE_ENGINE=1表示显式的清除这一个引擎,即强制不行使它们。如:

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1

-DWITH_enginename_STORAGE_ENGINE-WITHOUT_enginename_STORAGE_ENGINE都并未有点名某个引擎的话,这个引擎暗许动态编写翻译成模块,要是无法动态编写翻译成模块则不编写翻译。

Installation Layout Options

  • -DCMAKE_INSTALL_PREFIX=dir_name   # MySQL的设置地点
  • -DINSTALL_PLUGINDIR=dir_name      # 插件安装的目录
  • -DMYSQL_DATADIR=dir_name        # MySQL的data dir
  • -DSYSCONFDIR=dir_name        #
    MySQL默许的布置文件(my.cnf)路线
  • -DTMPDIR=dir_name          #
    临时文件存放路线,在MySQL伍.陆.1陆中才起来提供该选项

Feature Options

  • -DDEFAULT_CHARSET=charset_name

安装暗许字符集,默以为latin一。比如,binary,ascii,big伍,gb231二,gbk,latin一,latin二,latin五,latin七,utf8。

在cmake/character_sets.cmake文件中的CHA中华VSETS_AVAILABLE定义了同意选拔的字符集列表。

字符集的设置能够在MySQL服务运维的时候使用”–character_set_server”选项来钦命。

  • -DDEFAULT_COLLATION=collation_name

安装默认的排序规则。暗许排序规则为latin1_swedish_ci。使用SHOW COLLATION话语可以查看每个字符集能够行使的排序规则。

排序规则的装置能够在MySQL服务运行的时候利用--collation_server挑选来钦赐。

  • -DENABLED_LOCAL_INFILE=bool

Whether to enable LOCAL capability in the client library for LOAD DATA
INFILE.
This option controls client-side LOCAL capability, but the capability
can be set on the server side at server startup with the –local-infile
option.

  • -DMYSQL_TCP_PORT=port_num

点名MySQL的TCP端口,默许是330六。能够在开发银行服务时行使–port选项内定。

  • -DMYSQL_UNIX_ADDR=file_name

钦赐MySQL的套接字路径,必须是相对路线,默许是/tmp/mysql.sock。能够在运维服务时采纳–port选项钦点。

  • -DWITH_EXTRA_CHARSETS=name
    Which extra character sets to include:

    • all: All character sets. This is the default.
    • complex: Complex character sets.
    • none: No extra character sets.
  • -DWITH_INNODB_MEMCACHED=bool

Whether to generate memcached shared libraries (libmemcached.so and
innodb_engine.so).

  • -DWITH_SSL={ssl_type|path_name}
    The type of SSL support to include (if any) or the path name to the
    OpenSSL installation to use.

    • ssl_type can be one of the following values:
      • no: No SSL support. This is the default before MySQL 5.6.6.
        As of 5.6.6, this is no longer a permitted value and the
        default is bundled.
      • yes: Use the system SSL library if present, else the library
        bundled with the distribution.
      • bundled: Use the SSL library bundled with the distribution.
        This is the default as of MySQL 5.6.6.
      • system: Use the system SSL library.
    • path_name, permitted for MySQL 5.6.7 and after, is the path
      name to the OpenSSL installation to use. Using this can be
      preferable to using the ssl_type value of system, for it can
      prevent CMake from detecting and using an older or incorrect
      OpenSSL version installed on the system. (Another permitted way
      to do the same thing is to set the CMAKE_PREFIX_PATH option to
      path_name.).
  • -DWITH_ZLIB=zlib_type

    • bundled: Use thezliblibrary bundled with the distribution. This
      is the default.
    • system: Use the system zlib library.

Storage Engine Options

储存引擎是插件式的,可被静态编写翻译到MySQL服务中,也得以动态编写翻译成模块,编写翻译成模块时索要利用INSTALL PLUGIN话语也许--plugin-load选料来启用。但一些插件是平昔的,不恐怕钦点是静态编写翻译照旧动态编写翻译。

InnoDB,MyISAM,ME哈弗GE,MEMO猎豹CS陆Y和CSV存款和储蓄引擎总是暗中同意静态编写翻译到MySQL服务中的,在编写翻译安装的时候无需显式钦赐它们。

编写翻译存款和储蓄引擎的时候,使用-DWITH_enginename_STORAGE_ENGINE=1意味着静态编译到MySQL。可选的内燃机有:A卡宴C艾滋病E、BLACKHOLE、EXAMPLE、FEDERATED、PARTITION(分区援助引擎)、PE兰德奥迪Q5FSCHEMA(Performance
Schema)。如:

-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1

使用-WITHOUT_enginename_STORAGE_ENGINE=1代表显式的排除那个引擎,即强制不选拔它们。如:

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1

-DWITH_enginename_STORAGE_ENGINE-WITHOUT_enginename_STORAGE_ENGINE都不曾点名有个别引擎的话,那些引擎私下认可动态编译成模块,假若不可能动态编写翻译成模块则不编写翻译。

2. mysql多实例配置

mysql能够兑现多实例,但因为多实例会共用服务器财富,导致能源争用,在某实例某说话财富占用多数时(高并发、慢查询),其余的实例会遭遇震慑。

甭管rpm安装、通用二进制安装如故编写翻译安装,都有三种情势实现多实例。

  1. 共用配备文件
    在my.cnf中安顿八个”[mysqldN]”,N是叁个数字,表示MySQL服务。
    启动与停止的时候使用mysqld_multi {start|stop|restart} N。N能够是单个数字,也足以是逗号分隔的多个数字,仍是能够是短横线表示的限制数字。假若不是rpm包安装的,则mysqld_multi文件的途径在support-files中,将其copy到/etc/init.d下就能够(未有原生态的systemd多实例服务管理脚本)。

    mysqld_multi start 1,2,4-6
    
  2. 独自的布署文件和开发银行程序(推荐)
    MySQL只需安装一遍,即分化实例使用一样安装程序。但各类实例使用单独的安插文件、服务管理脚本、datadir目录和socket,并且启动和停止mysqld服务时索要内定套接字文件。

Feature Options

  • -DDEFAULT_CHARSET=charset_name

设置暗许字符集,默感到latin1。比方,binary,ascii,big伍,gb231贰,gbk,latin一,latin二,latin5,latin柒,utf8。

在cmake/character_sets.cmake文件中的CHA路虎极光SETS_AVAILABLE定义了同意行使的字符集列表。

字符集的装置可以在MySQL服务运转的时候利用”–character_set_server”选项来钦命。

  • -DDEFAULT_COLLATION=collation_name

设置暗中认可的排序规则。暗中认可排序规则为latin一_swedish_ci。使用SHOW COLLATION言辞能够查阅各个字符集能够使用的排序规则。

排序规则的安装能够在MySQL服务启动的时候使用--collation_server选料来钦定。

  • -DENABLED_LOCAL_INFILE=bool

Whether to enable LOCAL capability in the client library for LOAD DATA
INFILE.
This option controls client-side LOCAL capability, but the capability
can be set on the server side at server startup with the –local-infile
option.

  • -DMYSQL_TCP_PORT=port_num

点名MySQL的TCP端口,默许是3306。能够在开发银行服务时使用–port选项钦定。

  • -DMYSQL_UNIX_ADDR=file_name

点名MySQL的套接字路线,必须是相对路线,私下认可是/tmp/mysql.sock。能够在起步服务时选拔–port选项钦定。

  • -DWITH_EXTRA_CHARSETS=name
    Which extra character sets to include:

    • all: All character sets. This is the default.
    • complex: Complex character sets.
    • none: No extra character sets.
  • -DWITH_INNODB_MEMCACHED=bool

Whether to generate memcached shared libraries (libmemcached.so and
innodb_engine.so).

  • -DWITH_SSL={ssl_type|path_name}
    The type of SSL support to include (if any) or the path name to the
    OpenSSL installation to use.

    • ssl_type can be one of the following values:
      • no: No SSL support. This is the default before MySQL 5.6.6.
        As of 5.6.6, this is no longer a permitted value and the
        default is bundled.
      • yes: Use the system SSL library if present, else the library
        bundled with the distribution.
      • bundled: Use the SSL library bundled with the distribution.
        This is the default as of MySQL 5.6.6.
      • system: Use the system SSL library.
    • path_name, permitted for MySQL 5.6.7 and after, is the path
      name to the OpenSSL installation to use. Using this can be
      preferable to using the ssl_type value of system, for it can
      prevent CMake from detecting and using an older or incorrect
      OpenSSL version installed on the system. (Another permitted way
      to do the same thing is to set the CMAKE_PREFIX_PATH option to
      path_name.).
  • -DWITH_ZLIB=zlib_type

    • bundled: Use thezliblibrary bundled with the distribution. This
      is the default.
    • system: Use the system zlib library.

二.一 mysql多实例配置进度

正文介绍第1种方法,并运用rpm包安装的mysql落成多实例。再度印证,无论选用何种方法安装mysql,都得以完结多实例,其实看精通上面配置的长河就知晓了。

创办并安装datadir,并起初化、分别提供配置文件。

shell> mkdir -p /mydata/{3306,3307}/data
shell> chown -R mysql.mysql /mydata/{3306,3307}/data
shell> mysql_install_db --datadir=/mydata/3306/data --user=mysql
shell> mysql_install_db --datadir=/mydata/3307/data --user=mysql
shell> cp /etc/my.cnf /mydata/3306/my.cnf
shell> cp /etc/my.cnf /mydata/3307/my.cnf

假定是安装mysql
5.七的多实例,则起先化时利用如下命令替换上边包车型客车mysql_install_db

shell> mysqld --initialize-insecure --datadir=/mydata/3306/data --user=mysql
shell> mysqld --initialize-insecure --datadir=/mydata/3307/data --user=mysql

分级修改多少个布局文件。

#以下是3306实例的配置文件要修改的部分。
shell> vim /mydata/3306/my.cnf
[mysqld]
port=3306
datadir=/mydata/3306/data
socket=/mydata/3306/data/mysql.sock
server_id=1
[mysqld_safe]
log-error=/mydata/3306/data/mysqld.log
pid-file=/mydata/3306/data/mysqld.pid

#以下是3307实例的配置文件要修改部分。
shell> vim /mydata/3307/my.cnf
[mysqld]
port=3307
datadir=/mydata/3307/data
socket=/mydata/3307/data/mysql.sock
server_id=2
[mysqld_safe]
log-error=/mydata/3307/data/mysqld.log
pid-file=/mydata/3307/data/mysqld.pid

2. mysql多实例配置

mysql能够达成多实例,但因为多实例会共用服务器财富,导致财富争用,在某实例某说话能源占用大多时(高并发、慢查询),别的的实例会遭到震慑。

不管rpm安装、通用贰进制安装还是编写翻译安装,都有二种艺术完毕多实例。

  1. 共用配备文件
    在my.cnf中安排三个”[mysqldN]”,N是八个数字,表示MySQL服务。
    启动与停止的时候使用mysqld_multi {start|stop|restart} N。N能够是单个数字,也得以是逗号分隔的八个数字,还足以是短横线表示的限制数字。若是或不是rpm包安装的,则mysqld_multi文本的不二等秘书诀在support-files中,将其copy到/etc/init.d下就能够(没有原生态的systemd多实例服务管理脚本)。

    mysqld_multi start 1,2,4-6
    
  2. 单身的布局文件和起步程序(推荐)
    MySQL只需安装一遍,即不一致实例使用同样安装程序。但种种实例使用单独的布局文件、服务管理脚本、datadir目录和socket,并且启动与停止mysqld服务时必要内定套接字文件。

2.贰 提供sysV服务处理脚本

再各自提供服务管理脚本。

  • 以下是330陆实例的管住脚本/etc/init.d/mysqld330陆,内容更改自原有管理脚本/etc/init.d/mysqld。
  • 出于本人的言传身教中mysql是应用rpm安装,所以mysql的basedir为/usr,假诺是编写翻译安装或通用贰进制安装,则对应修改上面脚本中的basedir变量。
  • 上面包车型地铁datadir变量设置为/mydata/$port/data。请务必和方面包车型大巴开始化设置和配置文件中装置的如出一辙。
  • 将此管理脚本复制为/etc/init.d/mysqld3307,再修改下port=330柒即可作为3307实例的劳务管理脚本。
  • 此脚本不会开首化mysql(笔者把那有的代码删了)创制实例,所以运营服务前务必先早先化好相应的mysql实例。
  • 下边包车型客车本子就能够作为多实例服务管理脚本,也能够看作单实例服务管理脚本,只需将脚本名称改1改就可以。

#!/bin/sh
#
# mysqld    This shell script takes care of starting and stopping
#        the MySQL subsystem (mysqld).
#
# chkconfig: 345 64 36
# description:    MySQL database server.
# processname: mysqld

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

basedir=/usr
exec="$basedir/bin/mysqld_safe"
prog="mysqld"
port=3306
datadir="/mydata/$port/data"
socketfile="$datadir/mysql.sock"
errlogfile="$datadir/mysqld.log"
mypidfile="$datadir/mysqld.pid"
cnf="/mydata/$port/my.cnf"

# Set timeouts here so they can be overridden from /etc/sysconfig/mysqld
STARTTIMEOUT=120
STOPTIMEOUT=60

# Set in /etc/sysconfig/mysqld, will be passed to mysqld_safe
MYSQLD_OPTS=

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

lockfile=/var/lock/subsys/$prog

case $socketfile in
    /*) adminsocket="$socketfile" ;;
     *) adminsocket="$datadir/$socketfile" ;;
esac

start(){
    [ -x $exec ] || exit 5
    # check to see if it's already running
    RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1)
    if [ $? = 0 ]; then
    # already running, do nothing
    action $"Starting $prog: " /bin/true
    ret=0
    elif echo "$RESPONSE" | grep -q "Access denied for user"
    then
    # already running, do nothing
    action $"Starting $prog: " /bin/true
    ret=0
    else
    # Now start service
    $exec $MYSQLD_OPTS --defaults-file="$cnf" --datadir="$datadir" --socket="$socketfile" \
        --pid-file="$mypidfile" \
        --basedir="$basedir" --user=mysql >/dev/null &
    safe_pid=$!
    # Spin for a maximum of N seconds waiting for the server to come up;
    # exit the loop immediately if mysqld_safe process disappears.
    # Rather than assuming we know a valid username, accept an "access
    # denied" response as meaning the server is functioning.
    ret=0
    TIMEOUT="$STARTTIMEOUT"
    while [ $TIMEOUT -gt 0 ]; do
        RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1) && break
        echo "$RESPONSE" | grep -q "Access denied for user" && break
        if ! /bin/kill -0 $safe_pid 2>/dev/null; then
        echo "MySQL Daemon failed to start."
        ret=1
        break
        fi
        sleep 1
        let TIMEOUT=${TIMEOUT}-1
    done
    if [ $TIMEOUT -eq 0 ]; then
        echo "Timeout error occurred trying to start MySQL Daemon."
        ret=1
    fi
    if [ $ret -eq 0 ]; then
        action $"Starting $prog: " /bin/true
        touch $lockfile
    else
        action $"Starting $prog: " /bin/false
    fi
    fi
    return $ret
}

stop(){
    if [ ! -f "$mypidfile" ]; then
        # not running; per LSB standards this is "ok"
        action $"Stopping $prog: " /bin/true
        return 0
    fi
    MYSQLPID=`cat "$mypidfile"`
    if [ -n "$MYSQLPID" ]; then
        /bin/kill "$MYSQLPID" >/dev/null 2>&1
        ret=$?
        if [ $ret -eq 0 ]; then
        TIMEOUT="$STOPTIMEOUT"
        while [ $TIMEOUT -gt 0 ]; do
            /bin/kill -0 "$MYSQLPID" >/dev/null 2>&1 || break
            sleep 1
            let TIMEOUT=${TIMEOUT}-1
        done
        if [ $TIMEOUT -eq 0 ]; then
            echo "Timeout error occurred trying to stop MySQL Daemon."
            ret=1
            action $"Stopping $prog: " /bin/false
        else
            rm -f $lockfile
            rm -f "$socketfile"
            action $"Stopping $prog: " /bin/true
        fi
        else
        action $"Stopping $prog: " /bin/false
        fi
    else
        # failed to read pidfile, probably insufficient permissions
        action $"Stopping $prog: " /bin/false
        ret=4
    fi
    return $ret
}

restart(){
    stop
    start
}

condrestart(){
    [ -e $lockfile ] && restart || :
}


# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status -p "$mypidfile" $prog
    ;;
  restart)
    restart
    ;;
  condrestart|try-restart)
    condrestart
    ;;
  reload)
    exit 3
    ;;
  force-reload)
    restart
    ;;
  *)
    echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
    exit 2
esac

exit $?

采纳下边包车型大巴吩咐管理五个实例:

service mysqld3306 {start|stop|status|restart}
service mysqld3307 {start|stop|status|restart}

先是次运营可能会停业,也大概会警告和log相关的项,那是正规的,之后都会健康。

贰.一 mysql多实例配置进程

本文介绍第两种格局,并采纳rpm包安装的mysql实现多实例。再度表达,无论使用何种格局安装mysql,都足以兑现多实例,其实看领悟上面配置的经过就通晓了。

开创并设置datadir,并开首化、分别提供配置文件。

shell> mkdir -p /mydata/{3306,3307}/data
shell> chown -R mysql.mysql /mydata/{3306,3307}/data
shell> mysql_install_db --datadir=/mydata/3306/data --user=mysql
shell> mysql_install_db --datadir=/mydata/3307/data --user=mysql
shell> cp /etc/my.cnf /mydata/3306/my.cnf
shell> cp /etc/my.cnf /mydata/3307/my.cnf

假若是设置mysql
伍.七的多实例,则初阶化时接纳如下命令替换上面包车型地铁mysql_install_db

shell> mysqld --initialize-insecure --datadir=/mydata/3306/data --user=mysql
shell> mysqld --initialize-insecure --datadir=/mydata/3307/data --user=mysql

各自修改四个布局文件。

#以下是3306实例的配置文件要修改的部分。
shell> vim /mydata/3306/my.cnf
[mysqld]
port=3306
datadir=/mydata/3306/data
socket=/mydata/3306/data/mysql.sock
server_id=1
[mysqld_safe]
log-error=/mydata/3306/data/mysqld.log
pid-file=/mydata/3306/data/mysqld.pid

#以下是3307实例的配置文件要修改部分。
shell> vim /mydata/3307/my.cnf
[mysqld]
port=3307
datadir=/mydata/3307/data
socket=/mydata/3307/data/mysql.sock
server_id=2
[mysqld_safe]
log-error=/mydata/3307/data/mysqld.log
pid-file=/mydata/3307/data/mysqld.pid

贰.三 提供systemd服务管理脚本

  • 以下是330陆实例的军管脚本/usr/lib/systemd/system/mysqld330陆.service。
  • 由于本人的示范中mysql是选拔rpm安装,所以mysql的basedir为/usr,倘诺是编写翻译安装或通用2进制安装,则对应修改下边脚本中的basedir变量。
  • 鉴于rpm包安装在centos
    柒上,已经未有mysqld_safe指令,因而选拔mysqld来启动mysql实例。
  • 将此管理脚本复制为/usr/lib/systemd/system/mysqld330柒.service,再将其内的3306改造为3307就可以作为330七实例的劳动管理脚本。
  • 此脚本不会起首化mysql(作者把那部分代码删了)创立实例,所以运转服务前务必先初步化好相应的mysql实例。
  • 上面包车型地铁台本就可以作为多实例服务管理脚本,也得以用作单实例服务管理脚本,只需将脚本名称改一改就能够。
  • mysql为systemd自带了多实例服务管理脚本/usr/lib/systemd/system/mysqld@.service。小编从未采取,但其安装方法能够借鉴下。

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=forking

PIDFile=/mydata/3306/data/mysqld.pid

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Execute pre and post scripts as root
PermissionsStartOnly=true

# Start main service
ExecStart=/usr/sbin/mysqld --defaults-file=/mydata/3306/my.cnf --basedir=/usr --daemonize $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 5000

Restart=on-failure

RestartPreventExitStatus=1

PrivateTmp=false

下一场重载下systemd服务管理脚本。

systemctl daemon-reload

尔后就足以应用上边包车型大巴命令处理多少个实例:

systemctl {start|stop|status|restart} mysqld3306
systemctl {start|stop|status|restart} mysqld3307

贰.贰 提供sysV服务管理脚本

再分别提供劳务管理脚本。

  • 以下是330陆实例的管理脚本/etc/init.d/mysqld330陆,内容改变自原有管理脚本/etc/init.d/mysqld。
  • 鉴于自家的以身作则中mysql是接纳rpm安装,所以mysql的basedir为/usr,假设是编写翻译安装或通用二进制安装,则对应修改下边脚本中的basedir变量。
  • 上面包车型大巴datadir变量设置为/mydata/$port/data。请务必和下面的起初化设置和配备文件中设置的1致。
  • 将此处理脚本复制为/etc/init.d/mysqld330七,再修改下port=3307就能够作为3307实例的劳动管理脚本。
  • 此脚本不会初叶化mysql(笔者把那有个别代码删了)创制实例,所以运转服务前必须先初步化好相应的mysql实例。
  • 上面的脚本就能够作为多实例服务管理脚本,也得以看成单实例服务管理脚本,只需将脚本名称改1改就可以。

#!/bin/sh
#
# mysqld    This shell script takes care of starting and stopping
#        the MySQL subsystem (mysqld).
#
# chkconfig: 345 64 36
# description:    MySQL database server.
# processname: mysqld

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

basedir=/usr
exec="$basedir/bin/mysqld_safe"
prog="mysqld"
port=3306
datadir="/mydata/$port/data"
socketfile="$datadir/mysql.sock"
errlogfile="$datadir/mysqld.log"
mypidfile="$datadir/mysqld.pid"
cnf="/mydata/$port/my.cnf"

# Set timeouts here so they can be overridden from /etc/sysconfig/mysqld
STARTTIMEOUT=120
STOPTIMEOUT=60

# Set in /etc/sysconfig/mysqld, will be passed to mysqld_safe
MYSQLD_OPTS=

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

lockfile=/var/lock/subsys/$prog

case $socketfile in
    /*) adminsocket="$socketfile" ;;
     *) adminsocket="$datadir/$socketfile" ;;
esac

start(){
    [ -x $exec ] || exit 5
    # check to see if it's already running
    RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1)
    if [ $? = 0 ]; then
    # already running, do nothing
    action $"Starting $prog: " /bin/true
    ret=0
    elif echo "$RESPONSE" | grep -q "Access denied for user"
    then
    # already running, do nothing
    action $"Starting $prog: " /bin/true
    ret=0
    else
    # Now start service
    $exec $MYSQLD_OPTS --defaults-file="$cnf" --datadir="$datadir" --socket="$socketfile" \
        --pid-file="$mypidfile" \
        --basedir="$basedir" --user=mysql >/dev/null &
    safe_pid=$!
    # Spin for a maximum of N seconds waiting for the server to come up;
    # exit the loop immediately if mysqld_safe process disappears.
    # Rather than assuming we know a valid username, accept an "access
    # denied" response as meaning the server is functioning.
    ret=0
    TIMEOUT="$STARTTIMEOUT"
    while [ $TIMEOUT -gt 0 ]; do
        RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1) && break
        echo "$RESPONSE" | grep -q "Access denied for user" && break
        if ! /bin/kill -0 $safe_pid 2>/dev/null; then
        echo "MySQL Daemon failed to start."
        ret=1
        break
        fi
        sleep 1
        let TIMEOUT=${TIMEOUT}-1
    done
    if [ $TIMEOUT -eq 0 ]; then
        echo "Timeout error occurred trying to start MySQL Daemon."
        ret=1
    fi
    if [ $ret -eq 0 ]; then
        action $"Starting $prog: " /bin/true
        touch $lockfile
    else
        action $"Starting $prog: " /bin/false
    fi
    fi
    return $ret
}

stop(){
    if [ ! -f "$mypidfile" ]; then
        # not running; per LSB standards this is "ok"
        action $"Stopping $prog: " /bin/true
        return 0
    fi
    MYSQLPID=`cat "$mypidfile"`
    if [ -n "$MYSQLPID" ]; then
        /bin/kill "$MYSQLPID" >/dev/null 2>&1
        ret=$?
        if [ $ret -eq 0 ]; then
        TIMEOUT="$STOPTIMEOUT"
        while [ $TIMEOUT -gt 0 ]; do
            /bin/kill -0 "$MYSQLPID" >/dev/null 2>&1 || break
            sleep 1
            let TIMEOUT=${TIMEOUT}-1
        done
        if [ $TIMEOUT -eq 0 ]; then
            echo "Timeout error occurred trying to stop MySQL Daemon."
            ret=1
            action $"Stopping $prog: " /bin/false
        else
            rm -f $lockfile
            rm -f "$socketfile"
            action $"Stopping $prog: " /bin/true
        fi
        else
        action $"Stopping $prog: " /bin/false
        fi
    else
        # failed to read pidfile, probably insufficient permissions
        action $"Stopping $prog: " /bin/false
        ret=4
    fi
    return $ret
}

restart(){
    stop
    start
}

condrestart(){
    [ -e $lockfile ] && restart || :
}


# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status -p "$mypidfile" $prog
    ;;
  restart)
    restart
    ;;
  condrestart|try-restart)
    condrestart
    ;;
  reload)
    exit 3
    ;;
  force-reload)
    restart
    ;;
  *)
    echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
    exit 2
esac

exit $?

动用下面包车型地铁通令管理四个实例:

service mysqld3306 {start|stop|status|restart}
service mysqld3307 {start|stop|status|restart}

第3遍开发银行大概会退步,也说不定会警告和log相关的项,那是不奇怪的,之后都会正常。

3. mariadb安装

mariadb基本上算是mysql的另1个达成,绝大多数以及基础功效上和MySQL都同样。具体到安装上,也基本完全一致。

在centos7上,直接yum install mysql-server将私下认可安装mariadb,假若布署了mysql的yum源,需求钦点”mysql-community-server”才表示安装mysql。

以下仅提供mariadb的各个能源下载地址,具体安装格局见前文对应mysql安装格局。个人建议,将mariadb的劳动运营脚本阅读一遍,和MySQL的做个比较。

mariadb的镜像站点:

[mariadb]
name=mariadb
baseurl=http://yum.mariadb.org/10.2.6/centos/6.6/$basearch/
#baseurl=http://yum.mariadb.org/10.2.6/centos/7.2/$basearch/
enabled=1
gpgcheck=0

mariadb各通用二进制版:

mariadb各个二进制版本:https://downloads.mariadb.org/mariadb/+releases/

mariadb 10.2.6 systemd版(centos7):http://ftp.hosteurope.de/mirror/archive.mariadb.org//mariadb-10.2.6/bintar-linux-systemd-x86\_64/mariadb-10.2.6-linux-systemd-x86\_64.tar.gz

mariadb 10.2.6 非systemd版(centos6):http://ftp.hosteurope.de/mirror/archive.mariadb.org//mariadb-10.2.6/bintar-linux-x86\_64/mariadb-10.2.6-linux-x86\_64.tar.gz

mariadb源码包: http://ftp.hosteurope.de/mirror/archive.mariadb.org//mariadb-10.2.6/source/mariadb-10.2.6.tar.gz

2.3 提供systemd服务管理脚本

  • 以下是330陆实例的管理脚本/usr/lib/systemd/system/mysqld3306.service。
  • 由于自个儿的示范中mysql是行使rpm安装,所以mysql的basedir为/usr,假若是编写翻译安装或通用二进制安装,则对应修改上面脚本中的basedir变量。
  • 鉴于rpm包安装在centos
    七上,已经远非mysqld_safe指令,由此利用mysqld来启动mysql实例。
  • 将此管理脚本复制为/usr/lib/systemd/system/mysqld3307.service,再将其内的330陆改变为330柒就可以作为3307实例的劳动管理脚本。
  • 此脚本不会开端化mysql(作者把那部分代码删了)创立实例,所以运转服务前务必先开首化好相应的mysql实例。
  • 下边包车型大巴台本就能够作为多实例服务管理脚本,也得以作为单实例服务处理脚本,只需将脚本名称改一改就可以。
  • mysql为systemd自带了多实例服务管理脚本/usr/lib/systemd/system/mysqld@.service。作者从没接纳,但其设置方式能够借鉴下。

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=forking

PIDFile=/mydata/3306/data/mysqld.pid

# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0

# Execute pre and post scripts as root
PermissionsStartOnly=true

# Start main service
ExecStart=/usr/sbin/mysqld --defaults-file=/mydata/3306/my.cnf --basedir=/usr --daemonize $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 5000

Restart=on-failure

RestartPreventExitStatus=1

PrivateTmp=false

下一场重载下systemd服务管理脚本。

systemctl daemon-reload

未来就足以行使下边包车型地铁通令管理四个实例:

systemctl {start|stop|status|restart} mysqld3306
systemctl {start|stop|status|restart} mysqld3307

3. mariadb安装

mariadb基本上算是mysql的另1个兑现,绝大多数以及基础效用上和MySQL都平等。具体到安装上,也基本完全一致。

在centos7上,直接yum install mysql-server将暗中同意安装mariadb,即便安顿了mysql的yum源,必要钦赐”mysql-community-server”才代表安装mysql。

以下仅提供mariadb的种种财富下载地址,具体安装格局见前文对应mysql安装格局。个人建议,将mariadb的劳务运转脚本阅读三回,和MySQL的做个相比较。

mariadb的镜像站点:

[mariadb]
name=mariadb
baseurl=http://yum.mariadb.org/10.2.6/centos/6.6/$basearch/
#baseurl=http://yum.mariadb.org/10.2.6/centos/7.2/$basearch/
enabled=1
gpgcheck=0

mariadb各通用二进制版:

mariadb各样2进制版本:https://downloads.mariadb.org/mariadb/+releases/

mariadb 10.2.6 systemd版(centos7):http://ftp.hosteurope.de/mirror/archive.mariadb.org//mariadb-10.2.6/bintar-linux-systemd-x86\_64/mariadb-10.2.6-linux-systemd-x86\_64.tar.gz

mariadb 10.2.6 非systemd版(centos6):http://ftp.hosteurope.de/mirror/archive.mariadb.org//mariadb-10.2.6/bintar-linux-x86\_64/mariadb-10.2.6-linux-x86\_64.tar.gz

mariadb源码包: http://ftp.hosteurope.de/mirror/archive.mariadb.org//mariadb-10.2.6/source/mariadb-10.2.6.tar.gz

 

回来Linux种类文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

回到数据库体系小说大纲:http://www.cnblogs.com/f-ck-need-u/p/7586194.html

转载请注解出处:http://www.cnblogs.com/f-ck-need-u/p/7590376.html

注:若你以为这篇作品还不易请点击右下角推荐,您的支撑能激励作者越来越大的写作热情,非凡感激!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图