mysql

MySQL二进制安装及源码包安装

 

 

目录

 

内容概述

1.MySQL二进制安装 2.MySQL源码包安装 3.MySQL数据库基本管理

内容详细

1.MySQL二进制安装

MySQL二进制安装需要用到二进制包,二进制包其实就是编译好的源码包,这样我们就省去了编译的步骤了。  1.卸载MariaDB yum -y remove mariadb-libs.x86_64  2.创建用户 useradd -M -s /sbin/nologin -r mysql  3.安装依赖包: yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf  4.下载MySQL二进制包 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz  5.解压二进制包并做好软链接 tar -xf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz  mv mysql-5.7.35-linux-glibc2.12-x86_64 /usr/local/ ln -s /usr/local/mysql-5.7.35-linux-glibc2.12-x86_64/ /usr/local/mysql  6.配置MySQL数据存放目录并授权 chown -R mysql.mysql /usr/local/mysql-5.7.35-linux-glibc2.12-x86_64 mkdir /mysql_data chown -R mysql.mysql /mysql_data/  7.初始化MySQL服务 # 在这里我们了解一下MySQL5.6与MySQL5.7在安装时的一些区别 	1)首先是需要安装boost_1_59_0,这里推荐二进制安装MySQL5.7,因为已经过了cmake阶段,已经安装好了 	2)初始化命令有所不同: 	# 5.6初始化命令 	/service/mysql/scripts/mysql_install_db --user=mysql --basedir= --datadir= 	# 5.7初始化命令 	/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir= --datadir= 	# 这里的--initialize会生成一个临时的随机密码,通常密码的路径会告诉我们,我们需要使用这个密码登录数据库,并且修改密码也需要一定的强度,不然会提示你密码不安全,一般包含大小写字母,数字以及特殊符号 	# 如果不想生成这个密码的话,还可以使用这个参数 --initialize-insecure bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/mysql_data 参数解释: --initialize	: 指定初始化(生成一个临时密码) --user			: 指定用户(一般为mysql用户) --basedir		: mysql安装目录 --datadir		: 数据保存的目录  8.编写配置文件并启动 # 编写配置文件 注:MySQL的配置文件默认是/etc/my.cnf cat /etc/my.cnf # 指定配置的是MySQL服务端 [mysqld] # 指MySQL的安装目录 basedir=/usr/local/mysql # MySQL的数据目录 datadir=/mysql_data # MySQL的默认端口 port=3306 # Mysql的socket文件保存路径 socket=/usr/local/mysql/mysql.sock # MySQL保存数据的默认字符集 character-set-server=utf8mb4 # Mysql日志保存路径 log-error=/var/log/mysqld.log # MySQL 进程pid保存路径 pid-file=/tmp/mysqld.pid 			 # 指定的是配置MySQL客户端 [mysql] # 客户端读取的Socket文件的路径 socket=/usr/local/mysql/mysql.sock  # 指定客户端的socket文件路径 [client] socket=/usr/local/mysql/mysql.sock  # 启动MySQL服务 将目录中的MySQL启动脚本拷贝到/etc/init.d/mysqld,并添加一些内容 cp support-files/mysql.server /etc/init.d/mysqld vim /etc/init.d/mysqld basedir=/usr/local/mysql datadir=/mysql_data chmod +x /etc/init.d/mysqld /etc/init.d/mysqld start   9.配置环境变量 vim /etc/profile.d/mysql.sh export PATH=/usr/local/mysql/bin:$PATH source /etc/profile  10.配置system管理 vim /usr/lib/systemd/system/mysqld.service  [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=https://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 ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE = 5000  systemctl daemon-reload systemctl start mysqld  11.修改登录密码 在我们知道一开始生成的密码的情况下,我们登入MySQL mysql -uroot -pxxxxx 在MySQL命令行中执行 alter user   root@localhost   identified  by  'llyy@123!';	# 密码强度要符合要求 FLUSH PRIVILEGES;

2.MySQL源码包安装

㈡ 安装需求

安装需求 具体配置
安装目录(basedir) /mysql_3307
数据目录(datadir) /mysql_3307/data
端口号 3307
socket文件位置 $basedir/mysql.sock
字符集 utf8mb4

####㈢ ==了解配置选项==

  • 常用配置选项

配置选项 描述 默认值 建议值
CMAKE_INSTALL_PREFIX 安装基目录(basedir) /usr/local/mysql 根据需求
MYSQL_DATADIR 数据目录(datadir) $basedir/data 根据需求
SYSCONFDIR 默认配置文件my.cnf路径   /etc
MYSQL_TCP_PORT TCP/IP端口 3306 非默认端口
MYSQL_UNIX_ADDR 套接字socket文件路径 /tmp/mysql.sock $basedir/
DEFAULT_CHARSET 默认字符集 latin1 utf8mb4
DEFAULT_COLLATION 默认校验规则 latin1_swedish_ci utf8mb4_general_ci
WITH_EXTRA_CHARSETS 扩展字符集 all all
ENABLED_LOCAL_INFILE 是否启用本地加载外部数据文件功能 OFF 建议开启
WITH_SSL SSL支持类型 system 建议显式指定
WITH_BOOST Boost库源代码的位置   Boost库是构建MySQL所必需的,建议事先下载
  • 存储引擎相关配置项

说明:

以下选项值均为布尔值,0或1;0代表不编译到服务器中,1代表编译,建议都静态编译到服务器中。

其他的存储引擎可以根据实际需求在安装时通过WITH_xxxx_STORAGE_ENGINE=1的方式编译到服务器中。

配置选项 描述
WITH_INNOBASE_STORAGE_ENGINE 将InnoDB存储引擎插件构建为静态模块编译到服务器中;建议编译到服务器中
WITH_PARTITION_STORAGE_ENGINE 是否支持分区
WITH_FEDERATED_STORAGE_ENGINE 本地数据库是否可以访问远程mysql数据
WITH_BLACKHOLE_STORAGE_ENGINE 黑洞存储引擎,接收数据,但不存储,直接丢弃
WITH_MYISAM_STORAGE_ENGINE 将MYISAM存储引擎静态编译到服务器中
MySQL源码包安装自然需要的是源码包,源码包与二级制包的关系是二级制包是源码包cmake并且编译过的,所以可以节省大量的时间。 源码包安装除了在编译阶段需要大量时间外,其他的步骤与二进制安装基本一致  1.卸载MariaDB yum -y remove mariadb-libs.x86_64  2.创建用户 useradd -M -s /sbin/nologin -r mysql  3.安装依赖包: yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf openssl openssl-devel  4.安装boots(C++的库)(如果是自带boost版本的不需要安装) wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz tar -xf boost_1_59_0.tar.gz -C /usr/local/  5.下载源码包并解压 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.35.tar.gz tar -xf mysql-5.7.35.tar.gz   6.进入安装目录并cmake 注意 安装路径 数据存储路径 套接字文件路径  端口号 不自带boost的还得带上-DWITH_BOOST=/usr/local/boost_1_59_0 路径 cd mysql-5.7.35  cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.35 \ -DMYSQL_DATADIR=/usr/local/mysql-5.7.35/data \ -DMYSQL_UNIX_ADDR=/usr/local/mysql-5.7.35/tmp/mysql.sock \ -DDOWNLOAD_BOOST=1 \ -DWITH_BOOST=/usr/local/boost_1_59_0 \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ -DWITH_ZLIB=bundled \ -DWITH_SSL=system \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DENABLE_DOWNLOADS=1 \ -DWITH_DEBUG=0 ***自带boost cmake . \ -DCMAKE_INSTALL_PREFIX=/mysql_3307 \ -DMYSQL_DATADIR=/mysql_3307/data \ -DMYSQL_TCP_PORT=3307 \ -DMYSQL_UNIX_ADDR=/mysql_3307/mysql.sock \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DENABLED_LOCAL_INFILE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_general_ci \ -DWITH_SSL=system \ -DWITH_BOOST=boost 7.编译并安装 make 	# 需要较长时间	或者make -j cpu数  注意:多核编译容易造成内存溢出,4g内存比较稳妥,但有小概率会编译失败(快是真的快) make install 创建软链接: ln -s /usr/local/mysql-5.7.35/ /usr/local/mysql  8.创建一些必要的目录 mkdir /usr/local/mysql-5.7.35/{data,tmp} touch /var/log/mysqld.log chown -R mysql.mysql /usr/local/mysql-5.7.35 chown -R mysql.mysql /var/log/mysqld.log  9. 初始化数据库 /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/ # 初始化完成后会生成密码,后边登录数据库需要用到  10.启动数据库 配置system管理  [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=https://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 ExecStart=/usr/local/mysql-5.7.35/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE = 5000  systemctl daemon-reload  编辑配置文件 vim /etc/my.cnf [mysqld] basedir=/usr/local/mysql-5.7.35 datadir=/usr/local/mysql-5.7.35/data port=3306 socket=/usr/local/mysql-5.7.35/tmp/mysql.sock character-set-server=utf8mb4 log-error=/var/log/mysqld.log pid-file=/usr/local/mysql-5.7.35/tmp/mysqld.pid [mysql] socket=/usr/local/mysql-5.7.35/tmp/mysql.sock [client] socket=/usr/local/mysql-5.7.35/tmp/mysql.sock  systemctl start mysqld	# 启动数据库  11.配置环境变量 vim /etc/profile.d/mysql.sh export PATH=/usr/local/mysql/bin:$PATH source /etc/profile  12.修改登录密码 在我们知道一开始生成的密码的情况下,我们登入MySQL mysql -uroot -pxxxxx 在MySQL命令行中执行 alter user   root@localhost   identified  by  'llyy@123!';	# 密码强度要符合要求 FLUSH PRIVILEGES;

 

3.MySQL数据库基本管理

设置Mysql密码

初始状态下,管理员root的密码为空或者是随机生成的,而且至允许本机登录,一般情况下,我们安装好MySQL之后的第一件事就是修改默认的密码。  # 如果原密码为空,可以不用-p参数 mysqladmin -uroot password xxxxx  # 如果有密码且你还记得的话,那么: mysqladmin -uroot -pxxxxx password yyyyy  

MySQL连接工具与方式

1.MySQL自带的连接命令工具 Mysql自带的连接工具叫`mysql`,下面我们来详细介绍一下mysql连接工具 mysql # 常见的特定于客户机的连接选项: -u:             指定用户  mysql -uroot -p:             指定密码  mysql -uroot -p567 -h:             指定主机域  mysql -uroot -p567 -h127.0.0.1 -P:             指定端口    mysql -uroot -p567 -h127.0.0.1 -P3307 -S:             指定socket文件 mysql -uroot -p567 -S socket文件存放路径 -e:             指定SQL语句(库外执行SQL语句) mysql -uroot -p567 -e show databases; --protocol:     指定连接方式 mysql --protocol=TCP  --protocol=socket  连接方式: 1. TCP/IP的连接方式 2. 套接字连接方式,socket连接 3. 默认使用socket方式连接 查看方式: 在mysql命令行中输入:status; # 需要注意的是: 因为使用TCP/IP连接,需要建立三次握手 不一定-h都是tcp,-hlocalhost是socket连接 mysql -uroot -p -hlocalhost

MySQL配置文件

MySQL配置文件的作用是配置MySQL,使MySQL按照我们指定的方式健康运行  1.在执行mysql命令时,下列配置会生效,即mysql服务启动时生效 [mysqld] skip-grant-tables	# 跳过密码验证 port=3306 character_set_server=utf8 default-storage-engine=innodb innodb_file_per_table=1  2.针对客户端命令的全局配置,当mysql客户端命令执行时,下列配置生效 [client] port=3306 default-character-set=utf8 user=root password=123  3.只针对mysql这个客户端的配置,2中的是全局配置,而此处的则是只针对mysql这个命令的局部配置 [mysql] port=3306 default-character-set=utf8 user=root password=4573  # 如果没有[mysql],则用户在执行mysql命令时的配置以client为准

统一字符集编码

统一字符编码十分有必要,不统一字符编码就会出现乱码的问题  首先,我们可以修改系统的字符集编码 LANG=us_EN.UTF-8 LANG=zh_CN.UTF-8 临时修改报错命令为英文:LANG=us_EN.UTF-8 # 永久修改系统字符集: vim /etc/locale.conf LANG=us_EN.UTF-8  我们可以在cmake的时候指定字符集 cmake . -DDEFAULT_CHARSET=UTF8 \ -DDEFAULT_COLLATION=UTF8_GENERAL_CI  当然也可以在配置文件中指定字符集 vim /etc/my.cnf [mysqld] character-set-server=utf8 collation-server=utf8_general_ci   [client] default-character-set=utf8 [mysql] default-character-set=utf8 修改完毕后重启服务 查看修改的结果,在MySQL命令行中执行: show variables like '%char%';  校验规则: utf8_general_ci 1. ci:大小写不敏感 2. cs或bin:大小写敏感 # 一个表里不可能出现同名不同大小写的字段  # 查看校验规则: show collation;  utf8和utf8mb4之间有什么区别? utf8不支持emoji表情而utf8mb4支持  我们还可以通过SQL语句指定字符集编码 在MySQL命令行中输入:create database db1 charset utf8mb4 collate utf8mb4_general_ci;

修改MySQL root密码

修改root密码是十分有必要的,在生产环境中要求我们隔一段时间就修改密码 1.知晓root密码的情况下修改密码 # mysqladmin -uroot -p旧密码 password '新密码' # MySQL命令行中输入:	# 前提是知晓原密码并登入数据库 alter user root@localhost identified by 'xxxxx'; FLUSH PRIVILEGES;  2.不知晓root密码的情况下去修改密码 # 修改配置文件,在[mysqld]下加入一条命令 [mysqld] skip_grant_tables	# 跳过授权表 systemctl stop mysqld systemctl start mysqld 在MySQL命令行输入:UPDATE mysql.user set authentication_string = PASSWORD (xxxxxx) WHERE User = root and Host=localhost; FLUSH PRIVILEGES; # 密码修改完毕后记得删除配置文件中的跳过授权表的命令 然后停止,重启数据库  3.远程授权 grant all privileges on *.* to root@'%' identified by 'xxxxx'; flush privileges;

mysqladmin命令

1.修改密码,设置密码:passwd mysqladmin -uroot -p旧密码 password '新密码'  2.关闭MySQL服务:shutdown mysqladmin -uroot -p密码 -S socket文件路径 shutdown  3.库外建库:create mysqladmin -uroot -p密码 create egon mysql -uroot -p123456 -e 'create database egon'  4.库外删除数据库:drop mysqladmin -uroot -p123456 drop egon 输入y/N  5.查看配置文件所有的默认参数:variables mysqladmin -uroot -p123456 variables mysqladmin -uroot -p123456 variables | grep server_id   6.检测MySQL进程是否存活:ping mysqladmin -uroot -p123456 ping  7.查看数据库 慢查询,负载信息:status mysqladmin -uroot -p123456 status Uptime                   MySQL服务器已经运行的秒数 Threads                  活跃线程(客户)的数量  Questions                从mysqld启动起来自客户问题的数量   已经发送给服务器的查询的个数 Slow queries             已经超过long_query_time秒的查询数量  Opens                    mysqld已经打开了多少表  Flush tables             flush ..., refresh和reload命令数量  Open tables              现在被打开的表数量 Queries per second avg: 0.046   负载  8.重载授权表,刷新缓存主机:reload,相当于flush privileges mysqladmin -uroot -p123456 reload  9.刷新binlog日志 mysqladmin -uroot -p123456 flush-log