目录
1.MySQL二进制安装 2.MySQL源码包安装 3.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 -p"xxxxx" 在MySQL命令行中执行 alter user root@localhost identified by 'llyy@123!'; # 密码强度要符合要求 FLUSH PRIVILEGES;
安装需求 | 具体配置 |
---|---|
安装目录(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 -p"xxxxx" 在MySQL命令行中执行 alter user root@localhost identified by 'llyy@123!'; # 密码强度要符合要求 FLUSH PRIVILEGES;
初始状态下,管理员root的密码为空或者是随机生成的,而且至允许本机登录,一般情况下,我们安装好MySQL之后的第一件事就是修改默认的密码。 # 如果原密码为空,可以不用-p参数 mysqladmin -uroot password "xxxxx" # 如果有密码且你还记得的话,那么: mysqladmin -uroot -p"xxxxx" password "yyyyy"
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按照我们指定的方式健康运行 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;
修改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;
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