1. MySql介绍
MySQL是一个关系型数据库管理系统 , 由瑞典MySQL AB公司开发 , 属于 Oracle旗下产品。MySQL 是最流行的关系型数据库管理系统之一 , 在WEB应用方面 , MySQL是最好的 RDBMS (Relational Database Management System , 关系数据库管理系统) 应用软件之一。
MySQL是一种关系型数据库管理系统 , 关系数据库将数据保存在不同的表中 , 而不是将所有数据放在一个大仓库内 , 这样就增加了速度并提高了灵活性。
MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策 , 分为社区版和商业版 , 由于其体积小、速度快、总体拥有成本低 , 尤其是开放源码这一特点 , 一般中小型网站的开发都选择MySQL作为网站数据库。
1.1 MySql 主要分支
目前业界的MySQL主流分支版本有Oracle官方版本的MySQL、Percona Server、MariaDB。
1.1.1 Percona Server
Percona Server是MySQL重要的分支之一 , 它基于InnoDB存储引擎的基础上 , 提升了性能和易管理性 , 最后形成了增强版的XtraDB引擎 , 可以用来更好地发挥服务器硬件上的性能。所以Percona Server也可以称为增强的MySQL与开源的插件(plugin) 的结合。由于官方版本的MySQL在一些特性的使用上有一定的局限性 , 需要收费。所以Percona Server就有了一定的市场占有比例 , 也比较受大家的欢迎。像一些常用的工具包xtrabackup、percona-toolkit等 , 在生产环境中是DBA的必备武器。还有像XtraDB-Cluster这种支持多点写入的强同步高可用集群架构 , 真正实现实时同步的过程 , 解决了MySQL主从复制之间经常出现并让人头疼的延迟问题。而且Percona还收购了TokuDB公司 , TokuDB存储引擎非常优秀 , 淘宝网、阿里云上大量在使用这款存储引擎。它支持数据压缩 , 支持hot scheme modification , 它的高扩展性和优秀的查询插入性能都是我们喜欢它的地方。
需要注意的是 , Percona Server 虽然是开源的 , 但是他们自己管理代码 , 不接受外部开发人员的贡献 , 以这种方式确保他们对产品中所包含功能的控制。
1.1.2 Mariadb
MariaDB数据库管理系统是MySQL的一个分支 , 主要由开源社区在维护 , 采用GPL授权许可 MariaDB的目的是完全兼容MySQL , 包括API和命令行 , 使之能轻松成为MySQL的代替品。在存储引擎方面 , 使用XtraDB(英语 : XtraDB)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius(英语 : Michael Widenius)主导开发 , 他早前曾以10亿美元的价格 , 将自己创建的公司MySQL AB卖给了SUN , 此后 , 随着SUN被甲骨文收购 , MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的Maria的名字。
MariaDB基于事务的Maria存储引擎 , 替换了MySQL的MyISAM存储引擎 , 它使用了Percona的 XtraDB , InnoDB的变体 , 分支的开发者希望提供访问即将到来的MySQL 5.4 InnoDB性能。这个版本还包括了 PrimeBase XT (PBXT) 和 FederatedX存储引擎。
Mariadb是由MySQL创始人Monty创建的 , 是一款高度兼容的MySQL产品 , 主要由开源社区维护 , 采用GPL授权许可。Oracle把MySQL收购之后 , 为避免MySQL在开源粒度上的下降 , MariaDB由此而生。它不仅仅是MySQL的一个替代品 , 还创新与提高了MySQL原有的技术。既包含了Percona的XtraDB存储引擎 , 还包含TokuDB存储引擎、Spider水平分片存储引擎等多种存储引擎 ,并且还有一些复制功能上的新特性 , 比如基于表的并行复制、Multi-source Replication多源复制、Galera Cluster集群。还有比较有意思的一点就是MariaDB有一套Java的管理系统 , 可以通过投票机制来决定哪些特性和参数是我们需要的。
与Percona Server不同 , MariaDB是一个"开放"的分支 , Monty为了避免它闭源特别成立了一个基金会( https://mariadb.org/) , 把MariaDB放在基金会里 , 基金会无法进行商业活动 , 也就不会步MySQL的后尘。当然 , 也有一个对应的MariaDB公司(https://mariadb.com/) , 提供内部QA稳定性测试、商业套件、订阅服务、培训、甚至定制化开发服务等 , 所以即使MariaDB这个公司被收购了 , 也不会影响到MariaDB本身的发展。
1.1.3 相关地址
官方网址
https://www.mysql.com/ http://mariadb.org/ https://www.percona.com
官方文档
https://dev.mysql.com/doc/ https://mariadb.com/kb/en/ https://www.percona.com/software/mysql-database/percona-server
1.2 MySql特性
插件式存储引擎 : 也称为“表类型” , 存储管理器有多种实现版本 , 功能和特性可能均略有差别 ; 用户可根据需要灵活选择,
Mysql5.5.5开始innoDB引擎是MYSQL默认引擎 。MyISAM ==> Aria,InnoDB ==> XtraDB单进程 , 多线程
诸多扩展和新特性
提供了较多测试组件
开源
2. MySql 安装
如果需要安装Mariadb数据库 , 可以通过访问Mariadb的官网下载对应的安装包。
2.1 yum安装
安装时可以直接通过官方提供的光盘来安装数据库服务。
CentOS8光盘中软件版本mysql-server:8.0mariadb-server:10.3.17
CentOS7光盘中软件版本mariadb-server:5.5服务器包mariadb: 客户端工具包
CentOS6:mysql-server:5.1服务器包mysql: 客户端工具包
直接访问Mariadb官网 , 点击Download。
可以按照图中筛选mairadb的版本。并复制对应的repo配置文件。

之后直接使用以下命令安装Mariadb服务器端与客户端软件。
sudo yum install MariaDB-server MariaDB-client需要注意的是mysql在官网下载对应需要版本的mysql时, 会直接下载所有需要版本的rpm包。之后直接在本地解压之后, 使用yum localinstall *.rpm 安装这些软件包。安装过程中会从yum源中下载部分依赖包。

安装并启动之后, 首次启动过程中会生成默认一个密码。默认密码位置: /var/log/mysqld.log。如下日志中. 默认密码为PVA&Vs5y4TrU 。
[root@master ~]# tail /var/log/mysqld.log
2024-12-09T16:52:34.949035Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: PVA&Vs5y4TrU
2024-12-09T16:52:44.327951Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.
2024-12-09T16:52:44.403506Z 0 [System] [MY-015015] [Server] MySQL Server - start.
2024-12-09T16:52:44.713010Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 9.1.0) starting as process 30911
2024-12-09T16:52:44.754745Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-12-09T16:52:47.176411Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-12-09T16:52:48.870161Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2024-12-09T16:52:48.870245Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2024-12-09T16:52:48.996379Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '9.1.0' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server - GPL.
2024-12-09T16:52:48.996295Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock之后需要修改对应的用户密码。这里的密码有本身的安全限制。
[root@master ~]# mysql -uroot -p'PVA&Vs5y4TrU'
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 8
Server version: 9.1.0
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW VARIABLES LIKE 'validate_password%';
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> ALTER USER root@'localhost' IDENTIFIED BY 'P@ssw0rd';
Query OK, 0 rows affected (0.02 sec)
#设置root用户可以远程登录
mysql> update mysql.user set host='%' where user='root';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
#mysql默认安全限制如下
mysql> SHOW VARIABLES LIKE 'validate_password%';
+-------------------------------------------------+--------+
| Variable_name | Value |
+-------------------------------------------------+--------+
| validate_password.changed_characters_percentage | 0 |
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+-------------------------------------------------+--------+
8 rows in set (0.02 sec)2.2 二进制安装
首先需要在mariadb官网中下载二进制包。同时解压到root家目录下面。
准备编译环境,创建
mysql用户[root@centos7 ~]# groupadd -r -g 306 mysql [root@centos7 ~]# useradd -r -g 306 -u 306 -s /sbin/nologin mysql [root@centos7 ~]# id mysql uid=306(mysql) gid=306(mysql) groups=306(mysql)解压
mairadb二进制安装包[root@centos7 ~]# tar -xf mariadb-10.7.3-linux-systemd-x86_64.tar.gz -C /usr/local/ [root@centos7 ~]# cd /usr/local/ [root@centos7 local]# ln -sv mariadb-10.7.3-linux-systemd-x86_64 mysql ‘mysql’ -> ‘mariadb-10.7.3-linux-systemd-x86_64’ [root@centos7 ~]# chown -R root:root /usr/local/mysql/ [root@centos7 local]# echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh准备配置文件
[root@centos7 ~]# mkdir /mysqldb/mysql1/ -pv [root@centos7 ~]# cat /etc/my.cnf [mysqld] datadir=/mysqldb/mysql1/创建数据库文件
[root@centos7 ~]# cd /usr/local/mysql/ [root@centos7 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/mysqldb/mysql1/ --basedir=/usr/local/mysql/不能直接在
/usr/local/mysql/scripts目录下运行创建数据库文件的脚本,需要切换至安装数据库数据的目录下。否则会报如下错误[root@centos7 scripts]# ./mysql_install_db --datadir=/data/mysqldb --user=mysql FATAL ERROR: Could not find ./bin/my_print_defaults If you compiled from source, you need to either run 'make install' to copy the software into the correct location ready for operation. If you don't want to do a full install, you can use the --srcdir option to only install the mysql database and privilege tables. If you are using a binary release, you must either be at the top level of the extracted archive, or pass the --basedir option pointing to that location. The latest information about mysql_install_db is available at https://mariadb.com/kb/en/installing-system-tables-mysql_install_db 创建启动文件链接
[root@centos7 ~]# ln -sv /usr/local/mysql/support-files/systemd/* /usr/lib/systemd/system/ [root@centos7 ~]# systemctl daemon-reload [root@centos7 ~]# systemctl start mariadb或者通过
/usr/local/mysql/support-files/mysql.server文件启动服务将
/usr/local/mysql/support-files目录下面的文件mysql.server文件拷贝到/etc/init.d/目录下面,该文件为mysql服务启动文件。[root@centos7 support-files]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld使用
chkconfig添加服务[root@centos7 support-files]# chkconfig --add mysqld [root@centos7 support-files]# chkconfig --list Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by native systemd configuration. If you want to list systemd services use 'systemctl list-unit-files'. To see services enabled on particular target use 'systemctl list-dependencies [target]'. mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off 安全初始化数据库
[root@centos7 ~]# mysql_secure_installation #主要功能 设置数据库管理员root口令 禁止root远程登录 删除anonymous用户帐号 删除test数据库运用该命令时会出现如下报错。
[root@centos7 ~]# 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 haven't set the root password yet, you should just press enter here. Enter current password for root (enter for none): ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)以上报错的原因是因为
mysql_secure_install脚本中固定只是认/tmp/mysql.sock, 这个sock文件 解决这个文件可以将/etc/my.cnf配置文件中将sock文件设置为/tmp/mysql.sock,或者修改mysql_secure_install脚本中的内容,在下面函数中添加echo "socket=/run/mysqld/mysqld.sock" >>$config。make_config() { echo "# mysql_secure_installation config file" >$config echo "[mysql]" >>$config echo "user=root" >>$config esc_pass=`basic_single_escape "$rootpass"` echo "password='$esc_pass'" >>$config echo "socket=/run/mysqld/mysqld.sock" >>$config #sed 's,^,> ,' < $config # Debugging if test -n "$defaults_file" then dfile=`parse_arg "$defaults_file"` cat "$dfile" >>$config fi }
2.3 源码安装
直接在官网中下载所需版本的源码文件。

首先需要
mariadb官网中下载二进制包。同时解压root家目录下面。[root@centos7 ~]# wget https://mirrors.aliyun.com/mariadb//mariadb-10.3.34/source/mariadb-10.3.34.tar.gz准备编译环境,创建
mysql用户,数据库存放位置以及数据库安装位置和准备开发环境。[root@centos7 ~]# useradd -r -s /sbin/nologin mysql [root@centos7 ~]# id mysql uid=998(mysql) gid=996(mysql) groups=996(mysql) [root@centos7 ~]# mkdir /mysqldb [root@centos7 ~]# mkdir -pv /app/mysql [root@centos7 ~]# chown mysql.mysql /mysqldb/ [root@centos7 ~]# chown -R mysql.mysql /app/mysql/ [root@centos7 ~]#yum -y install bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel解压并编译
mariadb源码[root@centos7 ~]# tar -xf mariadb-10.4.12.tar.gz [root@centos7 ~]# cd mariadb-10.4.12 [root@node3 mariadb-10.4.12]# cmake . \ -DCMAKE_INSTALL_PREFIX=/app/mysql \ -DMYSQL_DATADIR=/mysqldb/ \ -DSYSCONFDIR=/etc \ -DMYSQL_USER=mysql \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITHOUT_MROONGA_STORAGE_ENGINE=1 \ -DWITH_DEBUG=0 \ -DWITH_READLINE=1 \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DWITH_LIBWRAP=0 \ -DENABLED_LOCAL_INFILE=1 \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci [root@node3 mariadb-10.4.12]# make && make install编译过程中会出现如下报错,以下报错信息表示缺少
ncurses-devel的rpm包。直接使用yum install ncurses-devel。
安装包之后 , 如果直接编译会出现以下报错,提示仍然缺少
ncurses-devel包。此时直接将目录中的编译文件删掉,重新解压一遍mariradb的二进制包即可。
如果出现上面报错 , 需要运行一下命令。
[root@centos7 mariadb-10.4.12]# rm -rf * [root@centos7 mariadb-10.4.12]# cd .. [root@centos7 ~]# tar -xf mariadb-10.4.12.tar.gz编译完成之后,需要有以下操作
[root@centos7 mariadb-10.3.34]# echo 'PATH=/app/mysql/bin:$PATH' > /etc/profile.d/mysql.sh [root@centos7 mariadb-10.3.34]# . /etc/profile.d/mysql.sh [root@centos7 mariadb-10.3.34]# cd /app/mysql/ [root@centos7 mysql]# ./scripts/mysql_install_db --datadir=/mysqldb/ --user=mysql Installing MariaDB/MySQL system tables in '/mysqldb/' ... 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 command: './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 You can start the MariaDB daemon with: cd '.' ; ./bin/mysqld_safe --datadir='/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/. Consider joining MariaDB's strong and vibrant community: https://mariadb.org/get-involved/之后设置mysql启动服务脚本
[root@centos7 ~]#cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld [root@centos7 ~]#chkconfig --add mysqld [root@centos7 ~]#service mysqld start
2.4 多实例安装
安装的话 , 服务器只需要安装一份。
[root@node1 ~]# mkdir /mysqld/{3306,3307,3308}/{etc,socket,pid,log,data} -p
[root@node1 ~]# chown -R mysql:mysql /mysqld/
[root@node1 ~]# mysql_install_db --datadir=/mysqld/3306/data/ --user=mysql --basedir=/usr
# 源码编译时需要特别指定--basedir=/usr 目录位置.
#查询这个选项可以通过命令:
[root@node1 ~]# mysql -e 'show variables like "basedir";'
[root@node1 ~]# mysql_install_db --datadir=/mysqld/3307/data/ --user=mysql --basedir=/usr
[root@node1 ~]# mysql_install_db --datadir=/mysqld/3308/data/ --user=mysql --basedir=/usr
# 之后编辑每个目录中的my.cnf文件
[root@node1 mysqld]# cat /mysqld/3306/etc/my.cnf
[mysqld]
port= 3306
datadir=/mysqld/3306/data
socket=/mysqld/3306/socket/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/mysqld/3306/log/mariadb.log
pid-file=/mysqld/3306/pid/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
## 3307 , 3308端口配置文件类似只需要修改端口号即可
#之后给每一个端口的目录中分配一个启动的脚本 , 脚本内容如下
[root@node1 3306]# cat /mysqld/3306/mysqld
#!/bin/bash
port=3306
mysql_user="root"
mysql_pwd=""
cmd_path="/usr/bin"
# 这个选项需要按照现实情况修改 , 具体的修改方式就是按照
mysql_basedir="/mysqld"
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"
function_start_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "starting MySQL...\n"
${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null &
else
printf "MySQL is running...\n"
exit
fi
}
function_stop_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped...\n"
exit
else
printf "Stopping MySQL...\n"
${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
fi
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
sleep 2
function_start_mysql
}
case $1 in
start)
function_start_mysql
;;
stop)
function_stop_mysql
;;
restart)
function_restart_mysql
;;
*)
printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}"
之后给脚本赋予执行权限并启动服务即可
[root@node1 3306]# chmod 700 /mysqldb/3307/mysqld
[root@node1 3306]# /mysqldb/3307/mysqld start 检查服务是否启动
[root@node1 3306]# ss -ntlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1127,fd=13))
LISTEN 0 32 *:1194 *:* users:(("openvpn",pid=979,fd=5))
LISTEN 0 128 *:22 *:* users:(("sshd",pid=984,fd=3))
LISTEN 0 100 [::1]:25 [::]:* users:(("master",pid=1127,fd=14))
LISTEN 0 80 [::]:3306 [::]:* users:(("mysqld",pid=2431,fd=20))
LISTEN 0 80 [::]:3307 [::]:* users:(("mysqld",pid=2552,fd=20))
LISTEN 0 80 [::]:3308 [::]:* users:(("mysqld",pid=2670,fd=20))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=984,fd=4))
可以看到3306、3307、3308端口都已经开启了,之后尝试用命令连接服务器,需要注意的是mysql命令连接数据库时,默认连接数据库的socket文件为:/var/lib/mysql/mysql.sock。所以连接数据库时需要指定数据库文件。
[root@node1 ~]# mysql -S /mysqld/3306/socket/mysql.sock 之后使用可以看到。
2.5 安装脚本
此次的自动化安装二进制mariadb脚本文件,详细说明在配置文件中,脚本需要修改的部分已经做了注释。
[root@centos7 src]# cat mysql.sh
#!/bin/bash
DIR=`pwd` # 最好将下载的二进制数据库存放在/usr/local/src目录下
NAME="mariadb-10.2.29-linux-x86_64.tar.gz" # 下载的二进制mariadb数据库
FULL_NAME=${DIR}/${NAME}
DATA_DIR="/data/mysql" # 数据库目录
yum install vim gcc gcc-c++ wget autoconf net-tools lrzsz iotop lsof iotop bash-completion -y
yum install curl policycoreutils openssh-server openssh-clients postfix -y
if [ -f ${FULL_NAME} ];then
echo "安装文件存在"
else
echo "安装文件不存在"
exit 3
fi
if [ -h /usr/local/mysql ];then # 判断目录是否有链接
echo "Mysql 已经安装"
exit 3
else
tar xvf ${FULL_NAME} -C /usr/local/src
ln -sv /usr/local/src/mariadb-10.2.29-linux-x86_64 /usr/local/mysql # 将数据库版本号修改
if id mysql;then
echo "mysql 用户已经存在,跳过创建用户过程"
fi
useradd mysql -r -s /sbin/nologin -d /data/mysql
if id mysql;then
chown -R mysql.mysql /usr/local/mysql/* -R
if [ ! -d /data/mysql ];then
mkdir -pv /data/mysql && chown -R mysql.mysql /data
/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql/
cp /usr/local/src/mariadb-10.2.29-linux-x86_64/support-files/mysql.server /etc/init.d/mysqld # 将数据库版本号进行修改
chmod a+x /etc/init.d/mysqld
cp ${DIR}/mariadb-10.2.29-linux-x86_64/support-files/my-huge.cnf /etc/my.cnf # 将数据库版本号进行修改
ln -sv /usr/local/mysql/bin/mysql /usr/bin/mysql
sed -r -i '/^\[mysqld\]/adatadir=/data/mysql' /etc/my.cnf # 用sed命令在数据库配置文件中添加/data/mysql数据库存放目录,否则数据库无法启动。
cd /etc/init.d/
/usr/sbin/chkconfig --add mysqld
/usr/sbin/chkconfig mysqld on # 设置为开机启动
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
/etc/init.d/mysqld start
else
echo "MySQL数据目录已经存在,"
exit 3
fi
fi
fi3. MySql命令
3.1 相关程序
客户端程序
mysql: 交互式的CLI工具mysqldump: 备份工具,基于mysql协议向mysql发起查询请求。并将查得的所有数据转换成insert 等写操作保存文本文件中。mysqladmin: 基于mysql协议管理mysqldmysqlimport: 数据导入工具
MyISAM存储引擎的管理工具
myisamchk: 检查MyISAM库myisampack: 打包MyISAM表。只读
服务器端程序
mysqld_safemysqld:mysql服务器端默认启动程序mysqld_multi: 多实例, 示例:mysqld_multi --example
3.2 运行命令类型
客户端命令。在客户端交互模式下,有内置的命令。每个命令都完整形式和简写格式.
?,(\?) : 查看语法帮助clear(\c) : 清空当前输入的语句。connect(\r) : 重新连接服务器delimiter(\d) : 设置语句分割符(结束符)。edit(\e) : 编辑命令ego(\G) : 发送命令至服务器 , 垂直显示结果exit(\q) : 退出客户端交互模式。同样可以使用quit。go(\g) : 发送命令至服务器。help(\h) : 显示帮助手册,和?类似。nopager(\n) : 退出pager模式。pager(\P) : 设置为pager模式,执行输出的方式。notee(\t) : 退出tee模式。tee(\T) : 将输入与输出全部都放在指定的文件中pager(\P) : 设置为pager模式,执行输出的方式。prompt(\R) : 修改mysql的提示符quit(\q) : 退出mysql客户端。status(\s) :获取mysql服务器端的状态信息。system(\!) : 执行系统shell命令。use(\u) : 将数据库的名字作为参数。使用另一个数据库charset(\C) : 修改客户端的字符编码。warnings(\W) : 每种状态信息之后会显示警告。nowarning(\w) : 每种状态信息之后不会显示警告
示例
MariaDB [(none)]> status -------------- mysql Ver 15.1 Distrib 5.5.65-MariaDB, for Linux (x86_64) using readline 5.1 Connection id: 10 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 5.5.65-MariaDB MariaDB Server Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 5 hours 39 min 0 sec Threads: 1 Questions: 44 Slow queries: 0 Opens: 1 Flush tables: 2 Open tables: 27 Queries per second avg: 0.002 -------------- MariaDB [(none)]> charset utf8 Charset changed MariaDB [(none)]> status -------------- mysql Ver 15.1 Distrib 5.5.65-MariaDB, for Linux (x86_64) using readline 5.1 Connection id: 10 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 5.5.65-MariaDB MariaDB Server Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 5 hours 39 min 17 sec Threads: 1 Questions: 47 Slow queries: 0 Opens: 1 Flush tables: 2 Open tables: 27 Queries per second avg: 0.002 -------------- MariaDB [(none)]>\R MariaDB \u@\h : \d\r:\m:\s> MariaDB root@localhost : (none)06:39:03>服务端命令 : 通过
mysql协议发往服务器执行并取回结果 , 命令末尾都必须使用命令结束符号 , 默 认为分号#示例 : mysql>SELECT VERSION();
3.3 MySql使用模式
交互模式 : 直接使用
mysql命令可以直接进入交互模式。交互模式属于MySql的常用模式脚本模式
mysql –uUSERNAME -pPASSWORD < /path/somefile.sql cat /path/somefile.sql | mysql –uUSERNAME -pPASSWORD mysql>source /path/from/somefile.sql
3.4 mysql命令
mysql命令行工具
语法 :
mysql [options] db_nameshell> mysql db_nameshell> mysql --user=user_name --password=your_password db_nameshell> mysql db_name < script.sql > output.tab
OPTIONS-A,--no-auto-rehash: 禁止补全--default-character-set=name: 设置客户端默认的字符集--delimiter=name: 设置默认的结束符-C,--compress: 启用压缩-D,--database=name: 连接服务器端之后,指定数据库为默认数据库-u,--user=name: 登录用户名-p,--password[=name]:登录密码,默认为空-P,--port=#: 设置mysql服务器端的端口,默认为3306/tcp--prompt=name: 修改客户端的提示符-S,--socker=name: 指定套接字文件的路径--protocol=name: 指定服务器端链接的协议:tcp,socket,pipe,memory。-e,--execute='SQL STATEMENT': 连接至服务器并让其执行此命令后直接退出;-h,--host=name: 远程mysql服务器地址,默认为localhost;-V,--version:显示版本-v,--verbose:显示详细信息--print-defaults: 获取程序默认使用的配置-U,--safe-updates: 更新或删除语句必须有where条件限制
注意:
mysql的用户账号由两部分组成 : 'USERNAME'@'HOST'; 其中HOST用于限制此用户可通过哪些远程主机连接当前的mysql服务;
HOST的表示方式 , 支持使用通配符:
%: 匹配任意长度的任意字符:172.16.%.%,172.16.0.0/16
_: 匹配任意单个字符;
示例 :
#默认空密码登录
mysql -uroot -p
#运行mysql命令
MariaDB [(none)]> use mysql;
MariaDB [mysql]> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.001 sec)
MariaDB [mysql]> SELECT User,Host,Password FROM user;
+-------------+-----------+----------+
| User | Host | Password |
+-------------+-----------+----------+
| mariadb.sys | localhost | |
| root | localhost | invalid |
| mysql | localhost | invalid |
| PUBLIC | | |
| | localhost | |
| | mariadb | |
+-------------+-----------+----------+
6 rows in set (0.002 sec)
#查看mysql版本
[root@centos7 ~]# mysql -V
mysql Ver 15.1 Distrib 10.4.24-MariaDB, for Linux (x86_64) using readline 5.1
#临时修改mysql提示符
[root@centos7 ~]# mysql --prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"
05:35:35(root@localhost) [(none)]>
#临时修改mysql提示符
[root@centos7 ~]# export MYSQL_PS1="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"示例: 配置客户端的mysql的自动登录
[root@centos7 ~]# vim /etc/my.cnf.d/mysql-clients.cnf
[client]
user=wang
password=centos3.5 mysqladmin
语法格式 : mysqladmin [options] command [command-arg] [command [command-arg]] ...
options
-c number:自动运行次数统计, 必须和-i一起使用-i number,--sleep=#: 间隔多长时间重复执行。#每隔两秒查看一次服务器的状态, 总共重复5次 ./mysqladmin -uroot -p -i 2 -c 5 status-h,--host=name: 连接的主机名或IP-f,--force: 即使发生SQL错误, 也要继续--default-character-set=: 指定默认字符集-p,--password[=name]: 登录密码, 如果不写于参数后,则会提示输入-P,--port=#:指定数据库端口-s,--silent: 如果不能建立与服务器的连接则以沉默方式退出。-S,--socket: 指定socket file-u,--user=name: 登录数据库用户名--compress,-C: 压缩客户和服务器之间发送的所有信息(如果两者均支持压缩)--protocol={TCP|SOCKET|PIPE|MEMORY}: 用于连接的协议(TCP、套接字、管道、内存)-v: 显示详细信息-V: 显示版本
command
create db_name: 创建一个名为db_name的新数据库drop db_name: 删除名为db_name的数据库和所有表extended-status: 显示服务器状态变量及其值。flush-hosts: 刷新主机缓存中的所有信息flush-logs: 刷新所有日志flush_privileges: 重载授权表,刷新授权(类似reload)kill id,id,...: 杀死MySQL线程password [new-password]: 修改用户密码ping: 检测MySQL是否活着processlist: 显示服务器中活动线程的列表reload: 重新加载授权表refresh: 刷新所欲表并关闭再打开日志文件shutdown: 关闭服务status: 从服务器发出简短的状态信息start-slave: 启动主动复制stop-slave: 暂停主从复制variables: 打印可以变量version: 获取服务的版本信息
[root@centos7 ~]# mysqladmin -uroot -pdaemon status
Uptime: 13419 Threads: 1 Questions: 104 Slow queries: 0 Opens: 15 Flush tables: 2 Open tables: 41 Queries per second avg: 0.007
[root@centos7 ~]# mysqladmin -uroot -pdaemon processlist
+----+------+-----------+----+---------+------+-------+------------------+----------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+----+------+-----------+----+---------+------+-------+------------------+----------+
| 22 | root | localhost | | Query | 0 | | show processlist | 0.000 |
+----+------+-----------+----+---------+------+-------+------------------+----------+mysqladmin status命令结果显示以下值:
uptime : MySQL服务器已运行的秒数
Threads : 活动线程(Client端)的数量
Qeustions : 自服务器启动以来, 来自Client端的问题(查询)数
Slow queries : 耗时超过long_query_time秒的查询数。
Opens : 服务器已打开的table数
Flush tables : 服务器已执行的flush-*,refresh和reload命令的数量 。
Open tables : 当前打开的table数
示例
#查看mysql服务是否正常,如果正常提示mysqld is alive
mysqladmin -uroot -pcentos ping
#关闭mysql服务, 但mysqladmin命令无法开启
mysqladmin -uroot -pcentos shutdown
#创建数据库testdb
mysqladmin -uroot -pcentos create testdb
#删除数据库testdb
mysqladmin -uroot -pcentos drop testdb
#修改root密码
mysqladmin -uroot -pcentos password 'xiong'
#日志滚动,生产新文件/var/lib/mysql/mariadb-bin.00000N
mysqladmin -uroot -pcentos flush-logs
#查询服务器的版本
mysqladmin -uroot -pcentos version
#重载权限信息
mysqladmin -uroot -pcentos reload3.6 服务器端配置
服务器端(mysqld) : 工作特性有多种配置方式
命令行选项
配置文件 : 类
ini格式 ,集中式的配置 , 能够为mysql的各应用程序提供配置信息
服务器端配置文件 : /etc/my.cnf; /etc/mysql/my.cnf;~/.my.cnf
配置文件格式:
[mysqld] [mysqld_safe] [mysqld_multi] [mysql] [mysqldump] [server] [client]格式:
parameter = value说明:
_和-相同 ;1、ON、TRUE意义相同 ;0、OFF、FALSE意义相同
3.7 socket地址
服务器监听的两种socket地址 :
ip socket: 监听在tcp的3306端口 , 支持远程通信 , 侦听3306/tcp端口可以在绑定有一个或全部接口IP上
unix sock : 监听在sock文件上 , 仅支持本机通信, 如 : /var/lib/mysql/mysql.sock)
说明 :
host为localhost时自动使用unix sock。
3.8 关闭mysql网络连接
只侦听本地客户端 , 所有客户端和服务器的交互都通过一个socket文件实现 , socket的配置存放在 /var/lib/mysql/mysql.sock) 可在/etc/my.cnf 修改。
范例 :
vim /etc/my.cnf
[mysqld]
skip-networking=14. mysql初始化
这里如果mariadb或者mysql如果需要重新安装数据库。可以通过直接删除数据库的数据目录(默认为/var/lib/mysql)。然后使用mysql_install_db命令实现数据库的初始化。这里需要注意mysql的5.8版本之后这个命令就直接集成到mysqld命令中 ,通过使用 --initialize 或--initialize-insecure选项调用mysqld来执行。
用法举例 :
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql3306--user为mysqld服务的运行用户 --basedir和--datadir则分别代表mysql的安装目录和数据存放目录
--basedir=path:mysql安装目录的路径--datadir=path:mysql数据目录的路径--skip-name-resolve:当创建授权表时,用ip地址而不是host名,这个选项在你的DNS不起作用时,非常有用。--user=user_name: 运行mysqld的系统用户名,通过mysqld创建的文件和目录的归属者将为该用户。--no-defaults: 不读取任何选项文件,该选项在mysql_install_db启动时,若因为读取了未知的参数而启动失败时使用。
#更改密码
MariaDB [(none)]> update mysql.user set password=password("centos") where user='root';
ERROR 1348 (HY000): Column 'Password' is not updatable
MariaDB [(none)]> set password for 'root'@'localhost'=password('123456');
Query OK, 0 rows affected (0.003 sec)
ALTER USER root@localhost IDENTIFIED BY "Password01!"参考链接
mySQL(关系型数据库管理系统)_百度百科 (baidu.com)
MySQL与主流分支版本简介 - 知乎 (zhihu.com)
