在企业生产场景下,数据库是重中之重,因此选择MySQL数据库一定要慎重。下面是给出的一些选择建议:
有二制安装、RPM包安装和源码编译安装这几种安装方式。
使用二进制包安装MySQL是比较常用的一种方式,这种安装方式,解压即用,非常简单,下面部署MySQL多实例就是以这种方式安装的。
这里使用Ubuntu 18.04 LTS操作系统来运行MySQL,主要分为六个步骤。
到MySQL官网下载二进制安装包,选择8.0 GA最新版本,当前8.0最新GA版本是8.0.40(2024-11-22)。
操作系统选择“Linux - Generic”,操作系统版本要根据系统的glibc版本来选择,可使用一些方法来确定glibc版本,比如通过 ldd 命令:ldd --version。
可先用浏览器下载安装包,再上传到服务器,也可直接在服务器上使用wget、curl等工具下载:wget https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.40-linux-glibc2.28-x86_64.tar.xz
安装包下载完成后使用md5sum工具检查文件校验码是否和官网提供的一致:md5sum mysql-8.0.40-linux-glibc2.28-x86_64.tar.xz
如果一切正常,解压二进制包,将解压后的文件夹放到一个安装目录下,如/opt目录下,并创建一个软链接。
tar xvf mysql-8.0.40-linux-glibc2.28-x86_64.tar.xz sudo mv mysql-8.0.40-linux-glibc2.28-x86_64 /opt/ sudo ln -s /opt/mysql-8.0.40-linux-glibc2.28-x86_64 /opt/mysql80
到此,MySQL其实就已经安装好了。
出于安全考虑,需要创建一个单独的用户来运行MySQL。 sudo groupadd mysql sudo useradd mysql -g mysql sudo passwd mysqluseradd -s /sbin/nologin -M mysql,-s指定用户登入后所使用的Shell,这里指定不允许登录,-M不创建家目录。
规划数据目录,用来存放MySQL数据文件,以及各类日志文件。 sudo mkdir -p /data/mysql3306/{data,log,binlog,relaylog,run,tmp} tree -d -L 2 /data每个实例的所有文件,都放在同一个顶层目录中,以 mysql{$PORT} 的方式命名。配置文件my.cnf存放到实例的顶层目录中,一个基本的配置文件如下: # /data/mysql3306/my.cnf [mysql] socket=/data/mysql3306/run/mysql.sock
[mysqld] port=3306 mysqlx_port=33060
basedir=/opt/mysql80 lc_messages_dir=/opt/mysql80/share
datadir=/data/mysql3306/data tmpdir=/data/mysql3306/tmp log-error=/data/mysql3306/log/alert.log slow_query_log_file=/data/mysql3306/log/slow.log general_log_file=/data/mysql3306/log/general.log socket=/data/mysql3306/run/mysql.sock
innodb_data_file_path=ibdata1:128M
innodb_buffer_pool_size=2Gskip_name_resolve参数,控制MySQL服务器是否解析主机名,配置该参数可提高连接速度。
先安装依赖:sudo apt install libaio1,再初始化MySQL。
使用mysqld初始化数据库,第一个参数必须是defaults-file,指向上一步准备好的my.cnf配置文件,第二个参数是initialize,指示mysqld进行初始化操作。
初始化成功后,可到错误日志最后一行查看mysql root账号临时密码,要用这个密码来登录数据库:tail -10 /data/mysql3306/log/alert.log
数据库初始化完成后,就可以启动了,不过在启动前,还需要做一件事情。如果初始化数据库时使用了root账号,需要把mysql目录下的文件owner修改成mysql:chown -R mysql:mysql /data/mysql3306/
有几种不同的方式来启动MySQL服务,下面使用mysqld_safe脚本来启动MySQL,defaults-file指定参数文件路径。 /opt/mysql80/bin/mysqld_safe --defaults-file=/data/mysql3306/my.cnf &关闭数据库可以使用:mysqladmin -uroot -p shutdown或者:mysql -uroot -p -e 'shutdown'。
客户端连接MySQL前,先安装依赖:sudo apt install libncurses6
数据库初始化时设置了一个临时密码,可在错误日志中找到:grep password /data/mysql3306/log/alert.log
使用临时密码登录数据库:/opt/mysql80/bin/mysql -uroot -p'ofo8A8M6q' -S /data/mysql3306/run/mysql.sock``
mysql -uroot -S /data/mysql3306/run/mysql.sock 登录后,先执行flush privileges命令,加载用户和权限相关的表,再执行alter user命令修改密码,然后重新启动MySQL,就可以正常访问数据库了。
flush privileges; alter user 'root'@'localhost' identified by 'root';
使用二进制方式安装MySQL并不复杂,其主要优点是可以很方便地部署多实例,在同一台服务器运行多个版本的MySQL,也可以方便地规划磁盘路径。
yum remove mysql-libs,然后重新安装libs。安装community-devel可能会报错,执行命令安装依赖:yum install openssl-devel -y,然后重新安装devel。
安装server可能会报错,执行命令安装依赖:yum install net-tools,然后重新安装server。
Bundle包中各类RPM文件说明如下:
grep password /var/log/mysqld.log使用临时密码登录数据库,执行alter user命令修改密码。密码修改后,数据库就可以正常使用了。set global validate_password.policy=0; set global validate_password.length=4; alter user 'root'@'localhost' identified by 'root';
使用RPM包安装的MySQL,增加了数据库账号密码强度的验证。这里设置密码的复杂度为简单类型,密码长度为4。
创建用户:create user 'root'@'%' identified with mysql_native_password by '1234';
给新创建的root分配权限:grant all on *.* to 'root'@'%';
cmake3
binutils
gcc 7.1以上版本
openssl
ncurse安装cmake3:yum install cmake3
安装 GCC:yum install centos-release-scl yum install devtoolset-11-gcc devtoolset-11-gcc-c++ devtoolset-11-binutils
安装其它依赖库:yum install -y ncurses-devel openssl openssl-devel
先进行之前编译安装配置的环境清理,清空PATH有关的MySQL,再停止之前启动的MySQL:/etc/init.d/mysqld stop
准备MySQL多实例数据目录:mkdir -p /data/330{7..9}/data
准备MySQL多实例日志目录:mkdir -p /binlog/330{7..9}
设置权限:chown -R mysql.mysql /data/* /binlog/*
可选:mv /etc/my.cnf /etc/my.cnf.bak
分别创建多实例配置文件
cat > /data/3307/my.cnf <<EOF [mysqld] basedir=/app/database/mysql/ datadir=/data/3307/data/ socket=/tmp/mysql3307.sock log_error=/data/3307/mysql.error.log port=3307 server_id=7 log_bin=/binlog/3307/mysql-bin EOF
分别初始化数据:mysqld --initialize-insecure --user=mysql --basedir=/app/database/mysql/ --datadir=/data/3307/data
cat > /etc/systemd/system/mysqld3307.service <<EOF [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 ExecStart=/app/database/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf LimitNOFILE = 5000 EOF
systemctl start mysqld3307mysql -S /my_mysql/3306/mysql.sock。mysql.sock是MySQL主机和客户机在同一host上的时候,使用UNIX Domain Socket做为通讯协议的载体,它比TCP快,在高并发场景下,效率更高。MySQL进程存在,sock文件就存在,pid文件也存在,否则全部消失。
远程登录授权,例如,允许root用户在192.168.1.x网段内,使用密码123456进行远程连接:
grant all privileges on *.* to 'root'@'192.168.1.%' identified by '123456';
mysqladmin -uroot -S /my_mysql/3306/mysql.sock password使用套接字文件登录:mysql -p -S /my_mysql/3306/mysql.sock。
D:\dev目录下。接着,将D:\dev\mysql-8.0.36-winx64\bin目录配置到环境变量Path当中:右键「此电脑」->「属性」->「高级系统设置」->「环境变量」->「系统变量」中的Path ->「编辑」->「新建」,添加MySQL安装路径中bin文件夹所在路径(也可以在系统变量中新建MYSQL_HOME,然后在系统变量Path新建%MYSQL_HOME%\bin)。
mysqld --initialize --console进行data目录初始化,此时会在控制台生成一个随机密码(--console的作用),先将该密码保存起来。也可以使用mysqld --initialize-insecure命令来初始化数据库,此时root用户没有密码,这意味着任何人都能以root用户身份登录并访问数据库。因此,在完成初始化后,应立即为root用户设置一个密码(修改默认账户密码:mysqladmin -u root password 123,123是指默认root账户密码,可以自行修改成自己喜欢的),以确保数据库的安全性。mysqld --install,看MySQL服务名称:右键「此电脑」->「管理」->「服务和应用程序」->「服务」,找MySQL服务。net start mysql,停止MySQL服务命令net stop mysql。mysql -uroot -p回车,输入刚才的随机密码,然后回车。 登陆参数:mysql -u用户名 -p密码 -h服务器ip地址(默认127.0.0.1) -P端口号(默认3306)退出MySQL:exit或quit。ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';,打开新的命令提示符窗口,重新登录MySQL。net stop mysql,删除MySQL服务mysqld --remove mysql,删除MySQL目录及相关环境变量。use mysql;update user set host = '%' where user = 'root';flush privileges;修改MySQL数据目录下的my.ini配置文件:
[mysql] #大概在63行左右,在其下添加 ... default-character-set=utf8 #默认字符集 [mysqld] # 大概在76行左右,在其下添加 ... character-set-server=utf8 collation-server=utf8_general_ci
重启服务后,查看编码命令:
show variables like 'character_%'; show variables like 'collation_%';
使用命名管道来进行进程间通信:需要在启动服务器程序的命令中加上--enable-named-pipe参数,然后在启动客户端程序的命令中加入--pipe或者--protocol=pipe参数。
使用共享内存来进行进程间通信:需要在启动服务器程序的命令中加上--shared-memory参数,在成功启动服务器后,共享内存便成为本地客户端程序的默认连接方式,不过也可以在启动客户端程序的命令中加入--protocol=memory参数来显式的指定使用共享内存进行通信。
注意:请在卸载前做好数据备份。
在操作完以后,需要重启计算机,然后进行安装即可。如果仍然安装失败,需要继续操作如下步骤。
HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesEventlogApplicationMySQL服务 目录删除 HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesMySQL服务 目录删除 HKEY_LOCAL_MACHINESYSTEMControlSet002ServicesEventlogApplicationMySQL服务 目录删除 HKEY_LOCAL_MACHINESYSTEMControlSet002ServicesMySQL服务 目录删除 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationMySQL服务 目录 删除 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMySQL服务删除
注册表中的ControlSet001、ControlSet002不一定是001和002,可能是ControlSet005、006。
出现这个原因是MySQL8之前的版本中加密规则是mysql_native_password,而在MySQL8之后,加密规则是caching_sha2_password。
解决问题方法有两种,第一种是升级图形界面工具版本,第二种是把MySQL8用户登录密码加密规则还原成mysql_native_password。
第二种解决方案如下,用命令行登录MySQL数据库之后,执行如下命令修改用户密码加密规则并更新用户密码:
# 使用mysql数据库 USE mysql; # 修改'root'@'localhost'用户的密码规则和密码 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'abc123'; # 刷新权限 FLUSH PRIVILEGES;
本文作者:a
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!