一、源码编译安装mariadb


  • 生产环境中,大部分使用的都是二进制安装或者源码编译安装,yum安装很多要求和设置很繁琐,容易出现错误

  • 此次源码编译安装需要先安装 cmake

 

1、准备cmake

[root@Centos6-server~]#rpm -q cmake
package cmake is not installed

[root@Centos6-server~]#yum install cmake
.....
==========================================================================================================================
 Package                   Arch                       Version                              Repository                Size
==========================================================================================================================
Installing:
 cmake                     x86_64                     2.8.12.2-4.el6                       base                     8.0 M
.....
Installed:
  cmake.x86_64 0:2.8.12.2-4.el6 
.....


2、清除其他版本的mariadb软件文件

[root@Centos6-server~]#rpm -q mariadb
package mariadb is not installed

[root@Centos6-server~]#rpm -q mariadb-server
package mariadb-server is not installed

[root@Centos6-server~]#find / -name mysql* | xargs rm -rf

 

 

3、创建软件用户账号

[root@Centos6-server~]#useradd -r -s /sbin/nologin mysql 

[root@Centos6-server~]#id mysql 

uid=496(mysql) gid=495(mysql) groups=495(mysql)

 

4、安装编译安装的包组及准备相关文件

[root@Centos6-server~]#yum groupinstall "development tools"

[root@Centos6-server~]#ls
anaconda-ks.cfg  mariadb-10.2.12  mariadb-10.2.12.tar.gz  reset68.sh

[root@Centos6-server~]#mkdir /data/mysqldb

[root@Centos6-server~]#chown mysql.mysql /data/mysqldb  

[root@Centos6-servermariadb-10.2.12]#ls
appveyor.yml    config.h.cmake      debian             INSTALL-WIN-SOURCE  mysql-test  README.md   strings        win
BUILD           configure.cmake     Docs               KNOWN_BUGS.txt      mysys       scripts     support-files  wsrep
BUILD-CMAKE     COPYING             EXCEPTIONS-CLIENT  libmariadb          mysys_ssl   sql         tests          zlib
client          COPYING.thirdparty  extra              libmysqld           pcre        sql-bench   unittest
cmake           CREDITS             include            libservices         plugin      sql-common  VERSION
CMakeLists.txt  dbug                INSTALL-SOURCE     man                 randgen     storage     vio

[root@Centos6-servermariadb-10.2.12]#gcc --version 
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 

 5、准备安装配置选项

cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysqldb/ \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DMYSQL_UNIX_ADDR=/app/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1
make && make install

[root@Centos6-servermariadb-10.2.12]#cmake . \
> -DCMAKE_INSTALL_PREFIX=/app/mysql \
> -DMYSQL_DATADIR=/data/mysqldb/ \
> -DSYSCONFDIR=/etc \
> -DMYSQL_USER=mysql \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \
> -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
> -DWITH_READLINE=1 \
> -DWITH_SSL=system \
> -DWITH_ZLIB=system \
> -DWITH_LIBWRAP=0 \
> -DMYSQL_UNIX_ADDR=/app/mysql/mysql.sock \
> -DDEFAULT_CHARSET=utf8 \
> -DDEFAULT_COLLATION=utf8_general_ci \
> -DENABLED_LOCAL_INFILE=1 \
> -DWITH_PARTITION_STORAGE_ENGINE=1 \
> -DWITH_DEBUG=0 \
> -DWITHOUT_MROONGA_STORAGE_ENGINE=1
......
-- Configuring done
-- Generating done
-- Build files have been written to: /root/mariadb-10.2.12

-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:
    MYSQL_USER
    SYSCONFDIR
    WITHOUT_MROONGA_STORAGE_ENGINE
    WITH_DEBUG

-- Build files have been written to: /root/mariadb-5.5.59

 

 6、补充其他包

[root@Centos6-servermariadb-10.2.12]#yum install ncurse-devel

[root@Centos6-servermariadb-10.2.12]#yum install gnutls-devel

[root@Centos6-servermariadb-10.2.12]#yum install libevent-devel

[root@Centos6-servermariadb-10.2.12]#yum install "libaio-devel"

[root@Centos6-servermariadb-10.2.12]#yum install "openssl-devel"

[root@Centos6-servermariadb-10.2.12]#yum install libxml2-devel

[root@Centos6-servermariadb-10.2.12]#yum install xz-devel

[root@Centos6-server~]#yum install ncurses-devel

 PH@LFDFX}F@DX(F`HY(4R`N.png

 

 8796I1C@%J_UH~E(52R}E7I.png

 

 7、调试相关选项

  • 添加环境变量

[root@Centos6-server~]#ls /data/mysqldb/

[root@Centos6-server~]#ls /app/mysql/bin/
aria_chk        myisam_ftdump      mysql_convert_table_format  mysql_plugin               replace
aria_dump_log   myisamlog          mysqld                      mysql_secure_installation  resolveip
aria_ftdump     myisampack         mysqld_multi                mysql_setpermission        resolve_stack_dump
aria_pack       my_print_defaults  mysqld_safe                 mysqlshow                  wsrep_sst_common
aria_read_log   mysql              mysqld_safe_helper          mysqlslap                  wsrep_sst_mariabackup
innochecksum    mysqlaccess        mysqldump                   mysqltest                  wsrep_sst_mysqldump
mariabackup     mysqladmin         mysqldumpslow               mysql_tzinfo_to_sql        wsrep_sst_rsync
mariadb_config  mysqlbinlog        mysql_find_rows             mysql_upgrade              wsrep_sst_xtrabackup
mbstream        mysqlcheck         mysql_fix_extensions        mysql_waitpid              wsrep_sst_xtrabackup-v2
msql2mysql      mysql_client_test  mysqlhotcopy                mytop
myisamchk       mysql_config       mysqlimport                 perror

[root@Centos6-server~]#echo 'PATH=/app/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh

[root@Centos6-server~]#cat /etc/profile.d/mysql.sh
PATH=/app/mysql/bin/:$PATH

[root@Centos6-server~]#. /etc/profile.d/mysql.sh

[root@Centos6-server~]#/app/mysql/scripts/mysql_install_db --basedir=/app/mysql --datadir=/data/mysqldb/3306/data --user=mysql

#因为我使用的是Cenots6.9安装的10.12,所以报了一些警告!
WARNING: The host 'Centos6-server' could not be looked up with /app/mysql/bin/resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MariaDB version. The MariaDB daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MariaDB privileges !
Installing MariaDB/MySQL system tables in '/data/mysqldb/3306/data' ...
-------------------------------------------------------------------------------------
警告:无法使用/app/mysql/bin/resolveip查找主机“Centos6-server”。这可能意味着您的libc库与此二进制MariaDB版本不是100%兼容的。 MariaDB守护进程mysqld应该正常工作,但主机名解析不起作用。这意味着你应该使用IP地址而不是主机名
指定MariaDB权限时!在'/data /mysqldb/3306/data'中安装MariaDB /MySQL系统表
-------------------------------------------------------------------------------------
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

-------------------------------------------------------------------------------------
要在启动时启动mysqld,必须将support-files/mysql.server复制到系统的正确位置
-------------------------------------------------------------------------------------
PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !     --->请记住为MariaDB root用户设置密码!
To do so, start the server, then issue the following commands:
'/app/mysql/bin/mysqladmin' -u root password 'new-password'
'/app/mysql/bin/mysqladmin' -u root -h Centos6-server password 'new-password'
Alternatively you can run:
'/app/mysql/bin/mysql_secure_installation'                        --->建议先使用这个脚本,修改密码并删除空用户
which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.
See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.
You can start the MariaDB daemon with:
cd '/app/mysql' ; /app/mysql/bin/mysqld_safe --datadir='/data/mysqldb/3306/data'
You can test the MariaDB daemon with mysql-test-run.pl
cd '/app/mysql/mysql-test' ; perl mysql-test-run.pl
Please report any problems at http://mariadb.org/jira
The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/
[root@Centos6-server~]#tree -d /data/mysqldb/
/data/mysqldb/
└── 3306
    └── data
        ├── mysql
        ├── performance_schema
        └── test
        
[root@Centos6-server~]#ls /app/mysql/support-files/                --->选取适合配置文件
binary-configure  my-huge.cnf             my-large.cnf   my-small.cnf         mysql-log-rotate  policy     wsrep_notify
magic             my-innodb-heavy-4G.cnf  my-medium.cnf  mysqld_multi.server  mysql.server      wsrep.cnf

[root@Centos6-server~]#cp /app/mysql/support-files/my-large.cnf /etc/my.cnf     
cp: overwrite `/etc/my.cnf'? y 

[root@Centos6-server~]#vim /etc/my.cnf                             --->修改配置文件
[mysqld]
datadir=/data/mysqldb/3306/data 

[root@Centos6-server~]#cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld       --->用给定的模板当作启动配置文件

[root@Centos6-server~]#vim /etc/init.d/mysqld

[root@Centos6-server~]#chkconfig --list mysqld
service mysqld supports chkconfig, but is not referenced in any runlevel (run 'chkconfig --add mysqld')

[root@Centos6-server~]#chkconfig --add mysqld                      --->加入启动服务

[root@Centos6-server~]#chkconfig --list mysqld
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off

[root@Centos6-server~]#chown -R mysql.mysql /data/mysqldb/3306/    --->修改数据库所属主组
[root@Centos6-server~]#ll -d /data/mysqldb/3306/
drwxr-xr-x 3 mysql mysql 4096 Jan 23 02:29 /data/mysqldb/3306/

[root@Centos6-server~]#chmod -R 700 /data/mysqldb/                 --->修改数据库权限
[root@Centos6-server~]#ll -d /data/mysqldb/3306/                   
drwx------ 3 700 mysql 4096 Jan 23 02:29 /data/mysqldb/3306/

[root@Centos6-server~]#ll /app/mysql/ -d                           --->给mysql在 /app/mysql添加属组
drwxr-xr-x 12 root root 4096 Jan 23 02:21 /app/mysql/              

[root@Centos6-server~]#chgrp -R mysql /app/mysql/                  --->给mysql在 /app/mysql添加写权限
[root@Centos6-server~]#chmod 775 /app/mysql/

[root@Centos6-server~]#ll /app/mysql/ -d
drwxrwxr-x 12 root mysql 4096 Jan 23 02:21 /app/mysql/

[root@Centos6-server~]#service mysqld start                        --->启动成功
Starting MySQL.180123 18:54:29 mysqld_safe Logging to '/data/mysqldb/3306/data/Centos6-server.err'.
180123 18:54:29 mysqld_safe Starting mysqld daemon with databases from /data/mysqldb/3306/data
.. SUCCESS!

 

 二、教材二进制编译过程


  • (1) 准备用户
        groupadd -r -g 306 mysql
        useradd -r -g 306 -u 306 –m –d /app/data mysql

  • (2) 准备数据目录
        以/app/data为例,建议使用逻辑卷
        chown mysql:mysql /app/data

  • (3) 准备二进制程序
        tar xf mariadb-VERSION-linux-x86_64.tar.gz -C /usr/local
        cd /usr/local;ln -sv mariadb-VERSION mysql
        chown -R root:mysql /usr/local/mysql/

  • (4) 准备配置文件
        配置格式:类ini格式,各程序由单个配置文件提供配[prog_name]
        配置文件查找次序:后面覆盖前面的配置文件
        /etc/my.cnf -->/etc/mysql/my.cnf --> --default-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnf
        mkdir /etc/mysql/
        cp support-files/my-large.cnf /etc/mysql/my.cnf
        [mysqld]中添加三个选项:
        datadir = /app/data
        innodb_file_per_table = on
        skip_name_resolve = on 禁止主机名解析,建议使用

  • (5)创建数据库文件
        cd /usr/local/mysql/
        ./scripts/mysql_install_db --datadir=/app/data --user=mysql

  • (6)准备日志文件
        touch /var/log/mysqld.log
        chown mysqld /var/log/mysqld.log

  • (7)准备服务脚本,并启动服务
        cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
        chkconfig --add mysqld
        service mysqld start

  • (8)安全初始化
        /user/local/mysql/bin/mysql_secure_installation

#给数据单独分区
[root@centos7mini-2~]#fdisk /dev/sda     
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     4196351     2097152   83  Linux
/dev/sda2         4196352   109053951    52428800   83  Linux
/dev/sda3       109053952   150996991    20971520   83  Linux
/dev/sda4       150996992   209715199    29359104    5  Extended
/dev/sda5       150999040   155193343     2097152   82  Linux swap / Solaris
Command (m for help): n
All primary partitions are in use
Adding logical partition 6
First sector (155195392-209715199, default 155195392): 
Using default value 155195392
Last sector, +sectors or +size{K,M,G} (155195392-209715199, default 209715199): +10G
Partition 6 of type Linux and of size 10 GiB is set
Command (m for help): t
Partition number (1-6, default 6): 
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000d3aae
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     4196351     2097152   83  Linux
/dev/sda2         4196352   109053951    52428800   83  Linux
/dev/sda3       109053952   150996991    20971520   83  Linux
/dev/sda4       150996992   209715199    29359104    5  Extended
/dev/sda5       150999040   155193343     2097152   82  Linux swap / Solaris
/dev/sda6       155195392   176166911    10485760   8e  Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@centos7mini-2~]#partprobe 
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.

[root@centos7mini-2~]#fdisk -l
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000d3aae
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     4196351     2097152   83  Linux
/dev/sda2         4196352   109053951    52428800   83  Linux
/dev/sda3       109053952   150996991    20971520   83  Linux
/dev/sda4       150996992   209715199    29359104    5  Extended
/dev/sda5       150999040   155193343     2097152   82  Linux swap / Solaris
/dev/sda6       155195392   176166911    10485760   8e  Linux LVM

#创建逻辑卷
[root@centos7mini-2~]#pvcreate /dev/sda6
  Physical volume "/dev/sda6" successfully created.
[root@centos7mini-2~]#pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sda6     lvm2 ---  10.00g 10.00g
[root@centos7mini-2~]#vgcreate mysqldata /dev/sda6 -s 4M
  Volume group "mysqldata" successfully created
[root@centos7mini-2~]#vgs
  VG        #PV #LV #SN Attr   VSize   VFree  
  mysqldata   1   0   0 wz--n- <10.00g <10.00g
[root@centos7mini-2~]#vgdisplay 
  --- Volume group ---
  VG Name               mysqldata
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <10.00 GiB
  PE Size               4.00 MiB
  Total PE              2559
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2559 / <10.00 GiB
  VG UUID               FTJuZE-BVbH-qAup-woFM-El6Y-p4Rv-wb2Qgw

[root@centos7mini-2~]#lvcreate -n lv_mysqldata -l 100%FREE mysqldata
  Logical volume "lv_mysqldata" created.
[root@centos7mini-2~]#lvs
  LV           VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_mysqldata mysqldata -wi-a----- <10.00g   

[root@centos7mini-2~]#lvdisplay 
  --- Logical volume ---
  LV Path                /dev/mysqldata/lv_mysqldata
  LV Name                lv_mysqldata
  VG Name                mysqldata
  LV UUID                Ht2RuM-1qAW-VOPJ-GO2w-2r1I-p2Oi-IJh6WH
  LV Write Access        read/write
  LV Creation host, time centos7mini-2, 2018-02-19 13:45:24 +0800
  LV Status              available
  # open                 0
  LV Size                <10.00 GiB
  Current LE             2559
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
#创建文件系统   
[root@centos7mini-2~]#mkfs.xfs /dev/mysqldata/lv_mysqldata
meta-data=/dev/mysqldata/lv_mysqldata isize=512    agcount=4, agsize=655104 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2620416, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0\

[root@centos7mini-2~]#mkdir /data -pv
[root@centos7mini-2/]#vim /etc/fstab
UUID=2fb078aa-57e5-43a1-aefe-eeb792bff3ef /data       xfs     defaults        0 0

#挂载
[root@centos7mini-2/]#mount -a
[root@centos7mini-2/]#df -h
Filesystem                          Size  Used Avail Use% Mounted on
/dev/mapper/mysqldata-lv_mysqldata   10G   33M   10G   1% /data

[root@centos7mini-2/]#chown -R mysql.mysql /data
[root@centos7mini-2/]#chmod 770 /data
[root@centos7mini-2/]#mkdir /data/mysqldb

#创建默认数据库相关内容
[root@centos7mini-2mysql]#pwd
/usr/local/mysql

[root@centos7mini-2mysql]#scripts/mysql_install_db --datadir=/data/mysqldb --user=mysql 
#注意:必须在这个路径下执行这条命令
Installing MariaDB/MySQL system tables in '/data/mysqldb' ...
2018-02-19 14:09:45 139791179409216 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release.
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:
'./bin/mysqladmin' -u root password 'new-password'
'./bin/mysqladmin' -u root -h centos7mini-2 password 'new-password'
Alternatively you can run:
'./bin/mysql_secure_installation'
which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.
See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.
You can start the MariaDB daemon with:
cd '.' ; ./bin/mysqld_safe --datadir='/data/mysqldb'
You can test the MariaDB daemon with mysql-test-run.pl
cd './mysql-test' ; perl mysql-test-run.pl
Please report any problems at http://mariadb.org/jira
The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/

#添加配置文件
[root@centos7mini-2~]#cp /usr/local/mysql/files/my-huge.cnf /etc/my.cnf
[root@centos7mini-2~]#vim /etc/my.cnf
[mysqld]
datadir=/data/mysqldb
port            = 3306

#修改服务启动脚本
[root@centos7mini-2~]#cp /usr/local/mysql/files/mysql.server /etc/init.d/mysqld
[root@centos7mini-2~]#chkconfig --add mysqld
[root@centos7mini-2mysql]#chkconfig --list
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@centos7mini-2mysql]#chkconfig mysqld on

#运行一次安全脚本
[root@centos7mini-2~]#mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): 
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y                                                   #设置root口令
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y                                              #删除匿名用户
 ... Success!
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] n                                        #是否禁用远程root连接
 ... skipping.
By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y                               #删除test库
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y                                         #是否加载权限表
 ... Success!
Cleaning up...
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!


 

 三、实现多实例

 

 1、准备多实例数据库

[root@Centos6-server~]#mkdir /data/mysqldb/{3306,3307,3308}/{pid,log,etc,data} -pv
[root@Centos6-server~]#/app/mysql/scripts/mysql_install_db --basedir=/app/mysql --datadir=/data/mysqldb/3307/data --user=mysql
WARNING: The host 'Centos6-server' could not be looked up with /app/mysql/bin/resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MariaDB version. The MariaDB daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MariaDB privileges !
Installing MariaDB/MySQL system tables in '/data/mysqldb/3307/data' ...
180123 18:59:25 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release.        --->'THREAD_CONCURRENCY'已被弃用,并将在未来版本中删除
180123 18:59:25 [Note] /app/mysql/bin/mysqld (mysqld 5.5.59-MariaDB) starting as process 20253 ...           --->作为进程20253开始
OK
Filling help tables...
180123 18:59:26 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release.
180123 18:59:26 [Note] /app/mysql/bin/mysqld (mysqld 5.5.59-MariaDB) starting as process 20262 ...
OK

[root@Centos6-server~]#/app/mysql/scripts/mysql_install_db --basedir=/app/mysql --datadir=/data/mysqldb/3308/data --user=mysql 
.....

[root@Centos6-server~]#tree -d /data/mysqldb
/data/mysqldb/
├── 3306
│   ├── data
│   │   ├── mysql
│   │   ├── performance_schema
│   │   └── test
│   ├── etc
│   ├── log
│   └── pid
├── 3307
│   ├── data
│   │   ├── mysql
│   │   ├── performance_schema
│   │   └── test
│   ├── etc
│   ├── log
│   └── pid
└── 3308
    ├── data
    │   ├── mysql
    │   ├── performance_schema
    │   └── test
    ├── etc
    ├── log
    └── pid/data/mysqldb
[root@Centos6-server~]#vim /data/mysqldb/3307/etc/my.cnf
.....
[mysqld]                                                      --->修改端口号
datadir=/data/mysqldb/3307/data
port=3307 

[mysql_safe]                                                  --->添加的日志和pid路径
log-error=/data/mysqldb/3307/log/mariadb.log
pid-file=/mysqldb/3307/pid/mariadb.pid  

[root@Centos6-server3307]#./mysqld start
Starting MySQL...

[root@Centos6-server3308]#./mysqld start
Starting MySQL...

[root@Centos6-server3307]#ss -ntlp
State      Recv-Q Send-Q       Local Address:Port     Peer Address:Port 
LISTEN     0      50                *:3306                   *:*        users:(("mysqld",20163,15))
LISTEN     0      50                *:3307                   *:*        users:(("mysqld",21976,15))
LISTEN     0      50                *:3308                   *:*        users:(("mysqld",21662,15))

 

[root@Centos6-server3307]#vim mysqld 
#!/bin/bash
port=3307
mysql_user="root"
mysql_pwd="centos"
cmd_path="/app/mysql/bin"
mysql_basedir="/data/mysqldb"
mysql_sock="${mysql_basedir}/${prot}/mysql.sock"
function_start_mysql()
{
    if [ ! -e "$mysql_sock" ] ; then
        printf "^[[1;32m Starting MySQL...^[[0m \n"
        ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/{port}/etc/my.cnf &> /dev/null &    
    else                                                   |--->启动服务配置文件的路径,配置文件内有启动命令
        printf "^[[1;5;33m MySQL is running...^[[0m \n"
        exit
    fi
}


function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ] ; then
        printf "^[[1;5;33m MySQL is stopped...^[[0m \n"
        exit
    else
        printf "^[[1;31m Stoping MySQL...^[[0m \n"
        ${cmd_path}/mysqladmin -u ${mysql_user } -p${mysql_pwd} -S ${mysql_sock} shutdown   
    fi                                           |--->关闭数据库专用语句,不要用kill关闭,容易导致数据丢失
}                                                |--->并且建议加上密码才能关闭,防止他人误操作

function_restart_mysql()
{
    printf "^[[1;36m Restarting MySQL...^[[0m \n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}

case $ in
start)
    function_start_mysql
    ;;
stop)
    function_stop_mysql
    ;;
restart)
    function_restart_mysql
    ;;
*)
    printf "Usage: ${mysql_basedir}/${prot}/bing/mysqld {start|stop|restart}\n"          
esac



[root@Centos6-server3308]#vim mysqld 
#!/bin/bash

port=3308
mysql_user="root"
mysql_pwd="centos"
cmd_path="/app/mysql/bin"
mysql_basedir="/data/mysqldb"
mysql_sock="${mysql_basedir}/${port}/mysql.sock"

function_start_mysql()
{
    if [ ! -e "$mysql_sock" ] ; then
        pritnf "^[[1;32m Starting MySQL...^[[0m \n"
        ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null &
    else
        printf "^[[1;5;33m MySQL is running...^[[0m \n"
        exit
    fi
}

function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ] ; then
        printf "^[[1;5;33m MySQL is stopped...^[[0m \n"
        exit
    else
        printf "^[[1;31m Stoping MySQL...^[[0m \n"
        ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
    fi
}

function_restart_mysql()
{
    printf "^[[1;36m Restarting MySQL...^[[0m \n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}

case $1 in
start)
    function_start_mysql
    ;;
stop)
    function_stop_mysql
    ;;
restart)
    function_restart_mysql
    ;;
*)
    pritnf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esca

 

2、配置文件内启动过程

[root@Centos6-server~]#vim /etc/my.cnf
.....
$exec --datadir="$datadir" --socket="$socketfile"\
      --pid-file="mypidfile" \
      --basedir=/usr --user=mysql > /dev/null 2>&1 &
safe_pid=$!


3、配置mysql服务密码及删除空用户

  • 生成数据库时,提示修改密码及删除空用户

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !     --->请记住为MariaDB root用户设置密码!
To do so, start the server, then issue the following commands:
'/app/mysql/bin/mysqladmin' -u root password 'new-password'
'/app/mysql/bin/mysqladmin' -u root -h Centos6-server password 'new-password'
Alternatively you can run:
'/app/mysql/bin/mysql_secure_installation'                        --->建议先使用这个脚本,修改密码并删除空用户

 

  • 使用命令修改密码

#在centos命令行加密码
[root@Centos6-server~]#mysqladmin -uroot -S /data/mysqldb/3308/mysql.sock password 'centos'

[root@Centos6-server~]#/data/mysqldb/3308/mysqld stop
Stoping MySQL...
[root@Centos6-server~]#/data/mysqldb/3308/mysqld start
Starting MySQL...

#在mysql里面修改密码,下面登陆的就是使用空用户及空口令登陆的
[root@Centos6-server~]#mysql -S /data/mysqldb/3307/mysql.sock 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.59-MariaDB Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> select user,password,host from mysql.user;  
+------+----------+----------------+
| user | password | host           |
+------+----------+----------------+
| root |          | localhost      |
| root |          | centos6-server |
| root |          | 127.0.0.1      |
| root |          | ::1            |
|      |          | localhost      |
|      |          | centos6-server |
+------+----------+----------------+
6 rows in set (0.01 sec)

#使用update命令,修改root账号密码,使用了password()函数,生成加密口令
MariaDB [(none)]> update mysql.user set password=password("centos") where user='root'; 
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0
MariaDB [(none)]> select user,password,host from mysql.user;
+------+-------------------------------------------+----------------+
| user | password                                  | host           |
+------+-------------------------------------------+----------------+
| root | *128977E278358FF80A246B5046F51043A2B1FCED | localhost      |
| root | *128977E278358FF80A246B5046F51043A2B1FCED | centos6-server |
| root | *128977E278358FF80A246B5046F51043A2B1FCED | 127.0.0.1      |
| root | *128977E278358FF80A246B5046F51043A2B1FCED | ::1            |
|      |                                           | localhost      |
|      |                                           | centos6-server |
+------+-------------------------------------------+----------------+
6 rows in set (0.00 sec)

#使用dorp命令,删除空用户
MariaDB [(none)]> drop user ''@'localhost e;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> drop user ''@'centos6-server';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> drop user '@'::1';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> drop user centos6-server';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> select user,password,host from mysql.user ;
+------+-------------------------------------------+----------------+
| user | password                                  | host           |
+------+-------------------------------------------+----------------+
| root | *128977E278358FF80A246B5046F51043A2B1FCED | localhost      |
| root | *128977E278358FF80A246B5046F51043A2B1FCED | 127.0.0.1      |
+------+-------------------------------------------+----------------+
2 rows in set (0.00 sec)

#修改后,要刷新,才能生效
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye

[root@Centos6-server~]#mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.59-MariaDB Source distribution
.....
MariaDB [(none)]> show variables like 'port' ;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0.01 sec)

 

4、yum安装实现多实例

  • yum可以指定源地址,安装特定的版本

  • 安装好后,建立多实力的目录,以存放相关数据及配置文件

  • 最好使用逻辑卷进行存储,这样后期方便扩容,单独分区磁盘,没有办法进行扩容

[root@centos7mini-2~]#mkdir /mysqldb/{3306,3307,3308} -pv
[root@centos7mini-2~]#mkdir /mysqldb/{3306,3307,3308}/{etc,socket,pid,log,data} -pv
[root@centos7mini-2~]#chown -R mysql.mysql /mysqldb/

#注意:如果是源码安装,还需要指定--basedir
[root@centos7mini-2~]#mysql_install_db --datadir=/mysqldb/3306/data --user=mysql --basedir=usr
[root@centos7mini-2~]#mysql_install_db --datadir=/mysqldb/3307/data --user=mysql --basedir=usr
[root@centos7mini-2~]#mysql_install_db --datadir=/mysqldb/3308/data --user=mysql --basedir=usr

#制作多实例配置文件
[root@centos7mini-2~]#cp /etc/my.cnf /mysqldb/3306/etc 
[root@centos7mini-2~]#vim /mysqldb/3306/etc/my.cnf
[mysqld]
port=3306                                          #默认3306是不需要加的,但是多实例其他的需要加上,例如3307
datadir=/mysqldb/3306/data
socket=/mysqldb/3306/socket/mysql.sock
[mysqld_safe]
log-error=/mysqldb/3306/log/mariadb.log
pid-file==/mysqldb/3306/pid/mariadb.pid

[root@centos7mini-2~]#cp /mysqldb/3306/etc/my.cnf /mysqldb/3307/etc/my.cnf 
[root@centos7mini-2~]#cp /mysqldb/3306/etc/my.cnf /mysqldb/3308/etc/my.cnf 
[root@centos7mini-2~]#sed -i 's/3306/3307/' /mysqldb/3307/etc/my.cnf
[root@centos7mini-2~]#sed -i 's/3306/3308/' /mysqldb/3307/etc/my.cnf

#修改启动脚本
[root@centos7mini-2~]#vim /mysqldb/3306/mysqld 
#!/bin/bash
port=3306
mysql_user="root"
mysql_pwd="centos"
cmd_path="/usr/bin"
mysql_basedir="/mysqldb"
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"

function_start_mysql()
{
    if [ ! -e "$mysql_sock" ] ; then
        pritnf "^[[1;32m Starting MySQL...^[[0m \n"
        ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null &
    else
        printf "^[[1;5;33m MySQL is running...^[[0m \n"
        exit
    fi
}

function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ] ; then
        printf "^[[1;5;33m MySQL is stopped...^[[0m \n"
        exit
    else
        printf "^[[1;31m Stoping MySQL...^[[0m \n"
        ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
    fi
}

function_restart_mysql()
{
    printf "^[[1;36m Restarting MySQL...^[[0m \n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}
case $1 in
start)
    function_start_mysql
    ;;
stop)
    function_stop_mysql
    ;;
restart)
    function_restart_mysql
    ;;
*)
    pritnf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esca

[root@centos7mini-2~]#cp /mysqldb/3306/mysqld /mysqldb/3307/mysqld
[root@centos7mini-2~]#chmod 700 /mysqldb/3306/mysqld 
[root@centos7mini 3306]#./mysqld start

[root@centos7mini-2~]#mysql -S /mysqldb/3307/socket/mysql.sock

MariaDB [(none)]> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3307  |
+---------------+-------+
1 row in set (0.00 sec)


5、修改多实例数据库登陆口令


[root@centos7mini~]#mysqladmin -uroot -S /mysqldb/3307/socket/mysql.sock password 'centos'