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

意气风发、MySQL数据库的合French Open址:

  • https://www.oracle.com/
  • http://dev.mysql.com/doc/refman/5.7/en/linux-installation.html
  •      
     //差异版本的装置文档和下载能够在此找

本文介绍mysql各个安装格局(rpm/glibc通用二进制/源码编写翻译)甚至多实例配置的方法,没什么技艺,算是风华正茂篇方法归并小说。

本文目录:
1.
mysql单实例安装
  1.1
rpm安装mysql
  1.2
通用二进制包安装mysql
    1.2.1
开头化数据库
    1.2.2
安装后的标准化操作
  1.3
编写翻译安装
    1.3.1
编译安装进度
    1.3.2
初始化
    1.3.3
规范化
    1.3.4
cmake编写翻译MySQL时的挑肥拣瘦表明
2.
mysql多实例配置
  2.1
mysql多实例配置进度
  2.2
提供sysV服务管理脚本
  2.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. 正文的装置情形为centos6.6和centos7.2,但超越七分之黄金时代地点都是centos6.6作为示范示例。
  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 8.0 的安装源个中包罗MySQL
    5.7的源,能够在末端步骤改革开放的酒店:
     *

2、 设置安装起来情况

暂时先把防火墙关闭保证实验顺利:
[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=/cSELINUX=disabled' /etc/selinux/config
查看SELinux状态:
[root@host-131 ~]# getenforce
Disabled

 3、卸载系统自带的数据库(Centos7自带的是maridb卡塔尔国

1.1 rpm包安装mysql

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

(1).centos7上,yum暗中认可将安装mariadb。
(2).centos6上,yum默许安装的本子相比较老(5.1版),要设置mysql 5.6或mysql
5.7,能够从官方下载,也能够选拔以下配置的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

假诺开发银行战败,则或者须要初步化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”创造四个密码,那将使得不可能直接动用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. 本文的设置蒙受为centos6.6和centos7.2,但多数地点都是centos6.6作为示范示例。
  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解答纠葛笔记】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 ~]# 

4、修改客栈

[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.2 通用二进制包安装mysql

通用二进制包也就是windows中的便携版软件,解压后有一些配置下就可以直接利用,不用安装。

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

  • MySQL 5.6通用二进制包下载:
    https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.35-linux-glibc2.12-x86_64.tar.gz
  • MySQL 5.7通用二进制包下载:
    https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux-glibc2.12-x86_64.tar.gz

其中文件中的glibc2.12表示的是Linux系统的glibc版本要比2.12新,能够利用ldd --version查阅glibc版本。在CentOS
6上glibc私下认可正是2.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

1.1 rpm包安装mysql

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

(1).centos7上,yum私下认可将安装mariadb。
(2).centos6上,yum暗中同意安装的本子相比老(5.1版),要安装mysql 5.6或mysql
5.7,能够从官方下载,也足以运用以下配置的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的次第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”创造七个密码,那将使得无法直接使用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.2.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

1.2 通用二进制包安装mysql

通用二进制包也正是windows中的便携版软件,解压后有一点点配置下就能够直接使用,不用安装。

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

  • MySQL 5.6通用二进制包下载:
    https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.35-linux-glibc2.12-x86_64.tar.gz
  • MySQL 5.7通用二进制包下载:
    https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux-glibc2.12-x86_64.tar.gz

里头文件中的glibc2.12代表的是Linux系统的glibc版本要比2.12新,能够行使ldd --version查阅glibc版本。在CentOS
6上glibc暗许正是2.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

1.2.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

1.2.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

1.3 编写翻译源码安装mysql

提出别天下本无事,尝试编写翻译装MySQL,完全部都以徒劳无益的事。若是真的要编写翻译安装,把my.cnf、服务管理脚本、编写翻译选项等关联到运转文件路线的项有限协助同等,举例pid文件、socket文件、datadir路线、log文件。并保管mysql涉及到的目录全部者和所属组都以mysql,举个例子暗许的pid路线/var/run/mysql/。

mysql源码包下载地址:

  • MySQL 5.6源码包下载:
    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

1.2.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

1.3.1 编写翻译安装进程

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

选取以下命令安装mysql 5.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
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,则增加黄金年代项-DWITH_SYSTEMD=1,那会提供systemd脚本。

在乎,上述编写翻译选项中尚无提供sysconfdir、datadir、pidfile和socket等mysql运营时文件类设置选项。即使能够安装,但没须求,并且在做多实例的时候或者会现出难点。可是,能够思索加上MYSQL_UNIX_ADDR项来设置socket路线,因为不安装的话其会使用默认的/tmp/mysql.sock。

1.3 编写翻译源码安装mysql

提出别天下本无事,尝试编写翻译装MySQL,完全都以徒劳无益的事。假若确实要编写翻译安装,把my.cnf、服务管理脚本、编写翻译选项等关联到运维文件路线的项保证同等,比方pid文件、socket文件、datadir路线、log文件。并保障mysql涉及到的目录全体者和所属组都是mysql,举个例子暗中认可的pid路径/var/run/mysql/。

mysql源码包下载地址:

  • MySQL 5.6源码包下载:
    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

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.7建议使用如下语句进行初叶化。

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

如果是centos7,则提供systemd风格的劳动管理脚本,并认但是不是要校订pid文件路线。

1.3.1 编写翻译安装进度

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

接收以下命令安装mysql 5.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
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,则增进大器晚成项-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 5.7提议选取如下语句实行开头化。

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

如果是centos7,则提供systemd风格的服务管理脚本,并断定是还是不是要校订pid文件路线。

1.3.4 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          #
    不经常文件存放路线,在MySQL5.6.16中才早先提供该选项

1.3.4 cmake编写翻译MySQL时的取舍表达

Storage Engine Options

储存引擎是插件式的,可被静态编译到MySQL服务中,也足以动态编写翻译成模块,编写翻译成模块时须求利用INSTALL PLUGIN说话或然--plugin-load选用来启用。但有些插件是永远的,无法钦命是静态编写翻译仍旧动态编写翻译。

InnoDB,MyISAM,ME兰德汉兰达GE,MEMOEscortY和CSV存款和储蓄引擎总是私下认可静态编写翻译到MySQL服务中的,在编译安装的时候不须求显式钦命它们。

编译存款和储蓄引擎的时候,使用-DWITH_enginename_STORAGE_ENGINE=1代表静态编写翻译到MySQL。可选的电动机有:ARCHIVE、BLACKHOLE、EXAMPLE、FEDERATED、PARTITION(分区帮助引擎)、PE奇骏FSCHEMA(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          #
    有时文件贮存路线,在MySQL5.6.16中才早先提供该选项

Feature Options

  • -DDEFAULT_CHARSET=charset_name

设置暗中同意字符集,默感觉latin1。举例,binary,ascii,big5
,gb2312,gbk,latin1,latin2,latin5,latin7,utf8。

在cmake/character_sets.cmake文件中的CHA奥迪Q5SETS_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端口,私下认可是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.

Storage Engine Options

积累引擎是插件式的,可被静态编译到MySQL服务中,也得以动态编写翻译成模块,编译成模块时必要接收INSTALL PLUGIN言语恐怕--plugin-load慎选来启用。但一些插件是永久的,不可能钦点是静态编写翻译依旧动态编写翻译。

InnoDB,MyISAM,ME奥迪Q5GE,MEMO福特ExplorerY和CSV存款和储蓄引擎总是暗许静态编写翻译到MySQL服务中的,在编译安装的时候没有须求显式内定它们。

编写翻译存款和储蓄引擎的时候,使用-DWITH_enginename_STORAGE_ENGINE=1表示静态编译到MySQL。可选的引擎有:ARC梅毒E、BLACKHOLE、EXAMPLE、FEDERATED、PARTITION(分区帮忙引擎)、PE途达FSCHEMA(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,big5
,gb2312,gbk,latin1,latin2,latin5,latin7,utf8。

在cmake/character_sets.cmake文件中的CHA普拉多SETS_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端口,暗许是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.

2.1 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
5.7的多实例,则初阶化时行使如下命令替换上边的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.2 提供sysV服务管理脚本

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

  • 以下是3306实例的拘留脚本/etc/init.d/mysqld3306,内容修改自原有处理脚本/etc/init.d/mysqld。
  • 出于自个儿的亲自过问中mysql是选用rpm安装,所以mysql的basedir为/usr,如若是编写翻译安装或通用二进制安装,则对应更正下边脚本中的basedir变量。
  • 下边的datadir变量设置为/mydata/$port/data。请必需和地点的初叶化设置和布署文件中安装的雷同。
  • 将此管理脚本复制为/etc/init.d/mysqld3307,再修改下port=3307就能够作为3307实例的劳务管理脚本。
  • 此脚本不会开始化mysql(我把那有的代码删了)创立实例,所以运营服务前必得先开始化好相应的mysql实例。
  • 上边包车型地铁本子就可以作为多实例服务处理脚本,也得以充当单实例服务管理脚本,只需将脚本名称改一改就能够。

#!/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相关的项,那是平常的,之后都会通常。

2.1 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
5.7的多实例,则带头化时利用如下命令替换上边的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.3 提供systemd服务管理脚本

  • 以下是3306实例的管制脚本/usr/lib/systemd/system/mysqld3306.service。
  • 鉴于自个儿的亲自去做中mysql是应用rpm安装,所以mysql的basedir为/usr,假设是编写翻译安装或通用二进制安装,则对应修正上面脚本中的basedir变量。
  • 是因为rpm包安装在centos
    7上,已经未有mysqld_safe一声令下,由此选用mysqld来启动mysql实例。
  • 将此管理脚本复制为/usr/lib/systemd/system/mysqld3307.service,再将其内的3306改造为3307就能够作为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

2.2 提供sysV服务管理脚本

再各自提供劳动管理脚本。

  • 以下是3306实例的田间管理脚本/etc/init.d/mysqld3306,内容改正自原有管理脚本/etc/init.d/mysqld。
  • 出于本身的亲自过问中mysql是行使rpm安装,所以mysql的basedir为/usr,假诺是编写翻译安装或通用二进制安装,则对应更正上边脚本中的basedir变量。
  • 下边包车型地铁datadir变量设置为/mydata/$port/data。请必须和地点的初步化设置和布置文件中安装的同等。
  • 将此管理脚本复制为/etc/init.d/mysqld3307,再修正下port=3307就能够作为3307实例的劳务处理脚本。
  • 此脚本不会初步化mysql(我把那有个别代码删了)创立实例,所以运维服务前必需先初阶化好相应的mysql实例。
  • 上边包车型大巴台本就可以作为多实例服务管理脚本,也得以视作单实例服务处理脚本,只需将脚本名称改一改就可以。

#!/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相关的项,那是常规的,之后都会健康。

3. mariadb安装

mariadb基本上算是mysql的另三个兑现,绝大好多以致底子功能上和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服务管理脚本

  • 以下是3306实例的管住脚本/usr/lib/systemd/system/mysqld3306.service。
  • 由于本人的示范中mysql是选择rpm安装,所以mysql的basedir为/usr,若是是编写翻译安装或通用二进制安装,则对应改过上面脚本中的basedir变量。
  • 鉴于rpm包安装在centos
    7上,已经未有mysqld_safe命令,由此利用mysqld来启动mysql实例。
  • 将此管理脚本复制为/usr/lib/systemd/system/mysqld3307.service,再将其内的3306改进为3307就能够作为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的另一个兑现,绝大繁多以至幼功效用上和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

 

归来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

注:若你感觉那篇小说还不易请点击右下角推荐,您的补助能激励笔者越来越大的作品热情,特别感激!

发表评论

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