mysql、mariadb安裝和多實例配置

分類:IT技術 時間:2017-09-25

本文目錄:
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各種安裝方法(rpm/glibc通用二進制/源碼編譯)以及多實例配置的方法,沒什麽技術,算是一篇方法歸總文章。

  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。

1. 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 通用二進制包安裝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.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.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 編譯源碼安裝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.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.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.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.4 cmake編譯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中才開始提供該選項

Storage Engine Options

存儲引擎是插件式的,可被靜態編譯到MySQL服務中,也可以動態編譯成模塊,編譯成模塊時需要使用INSTALL PLUGIN語句或者--plugin-load選項來啟用。但某些插件是固化的,無法指定是靜態編譯還是動態編譯。

InnoDB,MyISAM,MERGE,MEMORY和CSV存儲引擎總是默認靜態編譯到MySQL服務中的,在編譯安裝的時候無需顯式指定它們。

編譯存儲引擎的時候,使用-DWITH_enginename_STORAGE_ENGINE=1表示靜態編譯到MySQL。可選的引擎有:ARCHIVE、BLACKHOLE、EXAMPLE、FEDERATED、PARTITION(分區支持引擎)、PERFSCHEMA(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都沒有指定某些引擎的話,這些引擎默認動態編譯成模塊,如果無法動態編譯成模塊則不編譯。

Feature Options

  • -DDEFAULT_CHARSET=charset_name

設置默認字符集,默認為latin1。例如,binary,ascii,big5 ,gb2312,gbk,latin1,latin2,latin5,latin7,utf8。

在cmake/character_sets.cmake文件中的CHARSETS_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. 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.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.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.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/[email protected]。我沒有采用,但其設置方法可以借鑒下。
[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

註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!


Tags: 安裝 mysql 實例 配置 mariadb 編譯

文章來源:


ads
ads

相關文章
ads

相關文章

ad