MySQL多实例管(mysqld_multi)

Linux系统 0 738 张毅 收藏

官方文档

https://dev.mysql.com/doc/refman/5.6/en/mysqld-multi.html
https://dev.mysql.com/doc/refman/5.7/en/multiple-servers.html
https://dev.mysql.com/doc/refman/8.0/en/multiple-servers.html

MySQL多实例介绍

什么是MySQL多实例

MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务:;

MySQL多实例的特点

1:有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。

2:资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降。

 

部署mysql多实例的两种方式

第一种是使用多个配置文件启动不同的进程来实现多实例

这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便。

 

同一开发环境下安装两个数据库,必须处理以下问题:

l  配置文件安装路径不能相同

l  数据目录不能相同

l  启动脚本不能同名

l  端口不能相同

l  socket文件的路径不能相同

第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例

这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理。

Mysql多实例安装部署

安装规划

数据库版本

服务器端口

安装目录

数据文件目录

社区版8.0.16

3306

/u01/app/mysql-8.0.16



















配置操作系统

在 hosts 文件加上本机解析

如果不设置 hosts 本机解析,偶然会出现一些诡异的问题,所以还是加上比较好

host_ip=$(ifconfig | grep inet | grep cast | awk '{print $2}' | awk -F: '{print $NF}' | head -1)
echo "$host_ip `hostname`" >> /etc/hosts

配置sysctl.conf

cat >> /etc/sysctl.conf <<EOF
fs.file-max = 6000000
EOF

配置/etc/pam.d/login

cat >> /etc/pam.d/login <<EOF
session    required     pam_limits.so
EOF

配置资源限制limits.conf

cat >> /etc/security/limits.conf <<EOF
mysql soft nofile 655350
mysql soft nproc  655350
EOF

关闭 iptable

数据库一般不允许通外网,如果对防火墙不是很熟悉,可以关掉; 如果网络环境不够安全,可以开启

service iptables stop
chkconfig iptables off

systemctl stop firewalld
systemctl disable firewalld

关闭 selinux

selinux 可能会造成无法写入数据,如果对它不熟悉,建议关掉

查看 selinux 状态

getenforce

临时关闭

setenforce 0

永久关闭

打开 /etc/sysconfig/selinux

SELINUX=enforcing 改为 SELINUX=disabled

 

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0

关闭avhai-deamon

systemctl stop avahi-dnsconfd
systemctl stop avahi-daemon
systemctl disable avahi-dnsconfd
systemctl disable avahi-daemon

系统关闭NUMA

编辑 grub 文件

l  RHEL 7 (/etc/default/grub)

RHEL 7
添加numa=off

例如:

GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel_vm-210/root rd.lvm.lv=rhel_vm-210/swap vconsole.font=latarcyrheb-sun16 crashkernel=auto  vconsole.keymap=us rhgb quiet 
numa=off"
重新生成 /etc/grub2.cfg 配置文件(仅在RHEL 7上需要执行)
grub2-mkconfig -o /etc/grub2.cfg

重启系统

shutdown -r now

systemctl reboot

验证

numactl -H
 available: 1 nodes (0)
 node 0 size: 4195 MB
 node 0 free: 3304 MB
 node distances:
 node 0
  0: 10

如果成功关闭NUMA,则node的值为0

dmesg | grep -i numa=off

卸载mariadb

查询所安装的MariaDB组件

注意:

查询出来那些组件,就需要卸载那些组件。

[root@localhost]# rpm -qa | grep mariadb
MariaDB-server-5.5.49-1.el7.x86_64
MariaDB-common-5.5.49-1.el7.x86_64
MariaDB-client-5.5.49-1.el7.x86_64
mariadb-libs-5.5.49-1.el7.x86_64

卸载数据库

rpm -e --nodeps packagename

注意:

--nodeps参数不检查依赖关系。

 

例如:

rpm -e --nodeps $(rpm -qa | grep mariadb)

[root@localhost]# rpm -e --nodeps MariaDB-server-5.5.49-1.el7.x86_64
[root@localhost]# rpm -e --nodeps MariaDB-common-5.5.49-1.el7.x86_64
[root@localhost]# rpm -e --nodeps MariaDB-client-5.5.49-1.el7.x86_64
[root@localhost]# rpm -e --nodeps mariadb-libs-5.5.49-1.el7.x86_64

删除etc目录下的my.cnf

[root@centos ~]# rm /etc/my.cnf

安装mysql

root用户安装依赖包libaio

yum install -y libaio

root用户创建用户mysql

groupadd -g 1300 mysql
useradd -u 1310 -r -g mysql -s /bin/false mysql

root用户创建安装目录

mkdir -p /u01/app

上传安装包并解压

[root@centos ~]# tar -xvf mysql-8.0.16-el7-x86_64.tar

root用户安装mysql(解压即安装)到/u01/app

[root@centos ~]# tar -zxvf mysql-8.0.16-el7-x86_64.tar.gz -C /u01/app
mysql-8.0.16-el7-x86_64/bin/
mysql-8.0.16-el7-x86_64/bin/myisam_ftdump
mysql-8.0.16-el7-x86_64/bin/myisamchk
mysql-8.0.16-el7-x86_64/bin/myisamlog
mysql-8.0.16-el7-x86_64/bin/myisampack
mysql-8.0.16-el7-x86_64/bin/mysql
.
.
.
mysql-8.0.16-el7-x86_64/lib/libmysqlharness.so
mysql-8.0.16-el7-x86_64/lib/libmysqlharness.so.1
mysql-8.0.16-el7-x86_64/lib/libmysqlrouter.so
mysql-8.0.16-el7-x86_64/lib/libmysqlrouter.so.1

更改目录名称

[root@centos ~]# mv /u01/app/mysql-8.0.16-el7-x86_64 /u01/app/mysql-8.0.16

创建并编辑/etc/my.cnf

注意:

l  socket文件位置必须设置成相同。否则客户端连接会报错ERROR 2002 (HY000): Can't connect to local MySQL server through socket 'xx/mysql.sock' (2)

l  客户端先读取自己用户家目录下的my.cnf文件,在读取/etc/my.cnf。所以有些客户端配置信息可以写在家目录下的my.cnf文件,并为了安全将权限改为0600。

 

例如:

[mysql@centos ~]$ cat my.cnf
 
# This is an example of a my.cnf file for mysqld_multi.
# Usually this file is located in home dir ~/.my.cnf or /etc/my.cnf
 
[client]
# 客户端使用的字符集默认为8比特编码的latin1字符集
# UTF8的别名为utf8mb3,在mysql8中utf8mb3字符集已被弃用
default-character-set=UTF8MB4
user=xx
password=xx
 
[mysqld_multi]
 
# 将mysqld设置为mysqld_safe
mysqld = /u01/app/mysql-8.0.16/bin/mysqld_safe
 
# mysqladmin
mysqladmin = /u01/app/mysql-8.0.16/bin/mysqladmin
 
#此帐户用于多实例关闭时使用,需要在每个实例上创建并授权
user = multi_admin
password   = my_password
 
[mysqld06]
user = unix_user06
 
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server = UTF8MB4
 
# 创建新表时将使用的默认存储引擎
default-storage-engine = INNODB
 
# 设置mysql的安装目录
basedir= /u01/app/mysql-8.0.16
 
#设置3306端口
port = 3308
 
#设置socket文件位置
socket = /u01/app/mysql-8.0.16/data06/mysql.sock
 
# pid-file文件位置
pid-file  = /u01/app/mysql-8.0.16/data06/hostname.pid
 
# mysql数据库的数据的存放目录
datadir = /u01/app/mysql-8.0.16/data06
 
#默认语言
language = /u01/app/mysql-8.0.16/share/mysql/english
 
# 允许最大连接数
max_connections = 200
 
# 使用innodb引擎的每个表文件单独存储
innodb_file_per_table = 1
 
# 日志文件位置
log-error = /u01/app/mysql-8.0.16/data06/mysql.log
 
#关闭查询缓存
query_cache_size = 0
 
#定义日志组中的日志文件数量。默认值是2,推荐值4,(取值范围是2~100)。
innodb_log_files_in_group = 4
 
#日志文件的整体大小(innodb_log_file_size * innodb_log_files_in_group)不能超过略小于512GB的最大值。
#innodb_log_file_size以字节为单位定义日志组中每个日志文件的大小。
#通常,日志文件的合并大小应该足够大,服务器可以平滑工作负载活动中的波峰和波谷,这通常意味着有足够的重做日志空间来处理一个多小时的写活动。
#innodb_log_file_size值越大,缓冲池中需要的检查点刷新活动就越少,从而节省了磁盘I/O。
# 定义日志组中每个innodb log日志文件的大小
innodb_log_file_size = 1G
 
#innodb引擎同时能打开文件的最大数量
innodb_open_files = 60000
 
#binlog
# binlog cache大小,为每个session分配binlog_cache_size值大小的内存,使用的内存超过max_binlog_cache_size,就会使用硬盘临时文件
binlog_cache_size = 1M
 
# binlog cache最大大小
max_binlog_cache_size = 4G
 
#关闭自动提交
autocommit = 0
 
#在MySQL 5.6.6开始加入,并且MySQL 5.6跟MySQL 5.7的默认SQL模式不同
#MySQL 5.7的SQL模式更加严格了,限制了不合法的日期输入,比如”0000-00-00 00:00:00″。
#不会自动的为表中的第一个TIMESTAMP列加上DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属性
#关闭后,如果TIMESTAMP列没有显示的指定not null属性,那么默认的该列可以为null,此时向该列中插入null值时,会直接记录null,而不是current timestamp。
explicit_defaults_for_timestamp = 1
 
#事务隔离级别:提交读
transaction_isolation = read-committed
 
#当一个客户端连接上来的时候,服务端会执行主机名解释操作,当 DNS 很慢时,建立的连接也会很慢。
#因此建议在启动的时候设置 skip-name-resolve 来禁用 DNS 查找。
#唯一的局限是 GRANT 语句仅且仅能使用 IP 地址,所以,在已有系统中添加这个选项时需要格外小心。
skip_name_resolve = 1
 
#开启binlog
#注意:5.7及以上版本开启binlog需要同时设置log-bin和server-id。否则MySQL无法启动
log_bin = mysql_bin
 
#数据库server id
server_id = 1
 
#binlog格式
binlog-format=ROW
 
#binlog文件最大大小
max_binlog_size = 1G
 
#设置日志保留时长,过期自动删除,单位天
expire_logs_days = 15
 
# innodb
# 设置innodb buffer pool大小。buffer pool(类似oracle的buffer cache)使用LRU算法。建议将其配置为系统内存的50%到75%。缓冲池是用于存储InnoDB表,索引和其他辅助缓冲区的缓存数据的内存区域。
innodb_buffer_pool_size = 4G
 
# innodb log buffer(redo buffer)的大小.占用内存独立于buffer_pool,默认16M,最大3.99G。DML频繁的数据库考虑增加日志缓冲区的大小以节省磁盘I/O
innodb_log_buffer_size = 160M
 
#缓存insert、update、delete、purge操作的二级索引(默认all)
innodb_change_buffering = all
 
#mysql能同时读写文件文件的最大数量
open_files_limit = 65535
 
#保存死锁日志
innodb_print_all_deadlocks = 1
 
# NO_ENGINE_SUBSTITUTION防止在CREATE TABLE的engine = 子句中指定的引擎出现问题时使用其他存储引擎创建表
# 默认值ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
 
 
[mysqld07]
user = unix_user07
 
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server = UTF8MB4
 
# 创建新表时将使用的默认存储引擎
default-storage-engine = INNODB
 
# 设置mysql的安装目录
basedir= /u01/app/mysql-8.0.16
 
#设置3306端口
port = 3308
 
#设置socket文件位置
socket = /u01/app/mysql-8.0.16/data07/mysql.sock
 
# pid-file文件位置
pid-file  = /u01/app/mysql-8.0.16/data07/hostname.pid
 
# mysql数据库的数据的存放目录
datadir = /u01/app/mysql-8.0.16/data07
 
#默认语言
language = /u01/app/mysql-8.0.16/share/mysql/english
 
# 允许最大连接数
max_connections = 200
 
# 使用innodb引擎的每个表文件单独存储
innodb_file_per_table = 1
 
# 日志文件位置
log-error = /u01/app/mysql-8.0.16/data07/mysql.log
 
#关闭查询缓存
query_cache_size = 0
 
#定义日志组中的日志文件数量。默认值是2,推荐值4,(取值范围是2~100)。
innodb_log_files_in_group = 4
 
#日志文件的整体大小(innodb_log_file_size * innodb_log_files_in_group)不能超过略小于512GB的最大值。
#innodb_log_file_size以字节为单位定义日志组中每个日志文件的大小。
#通常,日志文件的合并大小应该足够大,服务器可以平滑工作负载活动中的波峰和波谷,这通常意味着有足够的重做日志空间来处理一个多小时的写活动。
#innodb_log_file_size值越大,缓冲池中需要的检查点刷新活动就越少,从而节省了磁盘I/O。
# 定义日志组中每个innodb log日志文件的大小
innodb_log_file_size = 1G
 
#innodb引擎同时能打开文件的最大数量
innodb_open_files = 60000
 
#binlog
# binlog cache大小,为每个session分配binlog_cache_size值大小的内存,使用的内存超过max_binlog_cache_size,就会使用硬盘临时文件
binlog_cache_size = 1M
 
# binlog cache最大大小
max_binlog_cache_size = 4G
 
#关闭自动提交
autocommit = 0
 
#在MySQL 5.6.6开始加入,并且MySQL 5.6跟MySQL 5.7的默认SQL模式不同
#MySQL 5.7的SQL模式更加严格了,限制了不合法的日期输入,比如”0000-00-00 00:00:00″。
#不会自动的为表中的第一个TIMESTAMP列加上DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属性
#关闭后,如果TIMESTAMP列没有显示的指定not null属性,那么默认的该列可以为null,此时向该列中插入null值时,会直接记录null,而不是current timestamp。
explicit_defaults_for_timestamp = 1
 
#事务隔离级别:提交读
transaction_isolation = read-committed
 
#当一个客户端连接上来的时候,服务端会执行主机名解释操作,当 DNS 很慢时,建立的连接也会很慢。
#因此建议在启动的时候设置 skip-name-resolve 来禁用 DNS 查找。
#唯一的局限是 GRANT 语句仅且仅能使用 IP 地址,所以,在已有系统中添加这个选项时需要格外小心。
skip_name_resolve = 1
 
#开启binlog
#注意:5.7及以上版本开启binlog需要同时设置log-bin和server-id。否则MySQL无法启动
log_bin = mysql_bin
 
#数据库server id
server_id = 1
 
#binlog格式
binlog-format=ROW
 
#binlog文件最大大小
max_binlog_size = 1G
 
#设置日志保留时长,过期自动删除,单位天
expire_logs_days = 15
 
# innodb
# 设置innodb buffer pool大小。buffer pool(类似oracle的buffer cache)使用LRU算法。建议将其配置为系统内存的50%到75%。缓冲池是用于存储InnoDB表,索引和其他辅助缓冲区的缓存数据的内存区域。
innodb_buffer_pool_size = 4G
 
# innodb log buffer(redo buffer)的大小.占用内存独立于buffer_pool,默认16M,最大3.99G。DML频繁的数据库考虑增加日志缓冲区的大小以节省磁盘I/O
innodb_log_buffer_size = 160M
 
#缓存insert、update、delete、purge操作的二级索引(默认all)
innodb_change_buffering = all
 
#mysql能同时读写文件文件的最大数量
open_files_limit = 65535
 
#保存死锁日志
innodb_print_all_deadlocks = 1
 
# NO_ENGINE_SUBSTITUTION防止在CREATE TABLE的engine = 子句中指定的引擎出现问题时使用其他存储引擎创建表
# 默认值ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
 
 
[mysqld08]
user = unix_user1
 
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server = UTF8MB4
 
# 创建新表时将使用的默认存储引擎
default-storage-engine = INNODB
 
# 设置mysql的安装目录
basedir= /u01/app/mysql-8.0.16
 
#设置3306端口
port = 3308
 
#设置socket文件位置
socket = /u01/app/mysql-8.0.16/data08/mysql.sock
 
# pid-file文件位置
pid-file  = /u01/app/mysql-8.0.16/data08/hostname.pid
 
# mysql数据库的数据的存放目录
datadir = /u01/app/mysql-8.0.16/data08
 
#默认语言
language = /u01/app/mysql-8.0.16/share/mysql/english
 
# 允许最大连接数
max_connections = 200
 
# 使用innodb引擎的每个表文件单独存储
innodb_file_per_table = 1
 
# 日志文件位置
log-error = /u01/app/mysql-8.0.16/data08/mysql.log
 
#关闭查询缓存
query_cache_size = 0
 
#定义日志组中的日志文件数量。默认值是2,推荐值4,(取值范围是2~100)。
innodb_log_files_in_group = 4
 
#日志文件的整体大小(innodb_log_file_size * innodb_log_files_in_group)不能超过略小于512GB的最大值。
#innodb_log_file_size以字节为单位定义日志组中每个日志文件的大小。
#通常,日志文件的合并大小应该足够大,服务器可以平滑工作负载活动中的波峰和波谷,这通常意味着有足够的重做日志空间来处理一个多小时的写活动。
#innodb_log_file_size值越大,缓冲池中需要的检查点刷新活动就越少,从而节省了磁盘I/O。
# 定义日志组中每个innodb log日志文件的大小
innodb_log_file_size = 1G
 
#innodb引擎同时能打开文件的最大数量
innodb_open_files = 60000
 
#binlog
# binlog cache大小,为每个session分配binlog_cache_size值大小的内存,使用的内存超过max_binlog_cache_size,就会使用硬盘临时文件
binlog_cache_size = 1M
 
# binlog cache最大大小
max_binlog_cache_size = 4G
 
#关闭自动提交
autocommit = 0
 
#在MySQL 5.6.6开始加入,并且MySQL 5.6跟MySQL 5.7的默认SQL模式不同
#MySQL 5.7的SQL模式更加严格了,限制了不合法的日期输入,比如”0000-00-00 00:00:00″。
#不会自动的为表中的第一个TIMESTAMP列加上DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属性
#关闭后,如果TIMESTAMP列没有显示的指定not null属性,那么默认的该列可以为null,此时向该列中插入null值时,会直接记录null,而不是current timestamp。
explicit_defaults_for_timestamp = 1
 
#事务隔离级别:提交读
transaction_isolation = read-committed
 
#当一个客户端连接上来的时候,服务端会执行主机名解释操作,当 DNS 很慢时,建立的连接也会很慢。
#因此建议在启动的时候设置 skip-name-resolve 来禁用 DNS 查找。
#唯一的局限是 GRANT 语句仅且仅能使用 IP 地址,所以,在已有系统中添加这个选项时需要格外小心。
skip_name_resolve = 1
 
#开启binlog
#注意:5.7及以上版本开启binlog需要同时设置log-bin和server-id。否则MySQL无法启动
log_bin = mysql_bin
 
#数据库server id
server_id = 1
 
#binlog格式
binlog_format = mixed
 
#binlog文件最大大小
max_binlog_size = 1G
 
#设置日志保留时长,过期自动删除,单位天
expire_logs_days = 15
 
# innodb
# 设置innodb buffer pool大小。buffer pool(类似oracle的buffer cache)使用LRU算法。建议将其配置为系统内存的50%到75%。缓冲池是用于存储InnoDB表,索引和其他辅助缓冲区的缓存数据的内存区域。
innodb_buffer_pool_size = 4G
 
# innodb log buffer(redo buffer)的大小.占用内存独立于buffer_pool,默认16M,最大3.99G。DML频繁的数据库考虑增加日志缓冲区的大小以节省磁盘I/O
innodb_log_buffer_size = 160M
 
#缓存insert、update、delete、purge操作的二级索引(默认all)
innodb_change_buffering = all
 
#mysql能同时读写文件文件的最大数量
open_files_limit = 65535
 
#保存死锁日志
innodb_print_all_deadlocks = 1
 
# NO_ENGINE_SUBSTITUTION防止在CREATE TABLE的engine = 子句中指定的引擎出现问题时使用其他存储引擎创建表
# 默认值ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


*验证配置(mysql 8.0.16才引入这个功能)

注意:

无输出即表示配置无错误。

 

mysqld --validate-config
validate-config

Root用户对应目录

创建数据目录

mkdir -p /u01/app/mysql-8.0.16/data0[678]
 
{data,log,tmp}

Root用户初始化数据目录

mysql-files目录提供了一个方便的位置,可以将其用作secure_file_priv系统变量的值,该变量将导入和导出操作限制在特定的目录中。

 

Mysql用户创建目录

[root@centos ~]$ cd /u01/app/mysql-8.0.16
[root@centos mysql]$ mkdir -p /u01/app/mysql-8.0.16/mysql-files

#创建软链接

[root@centos ~]$ ln -s /u01/app/mysql /u01/app/mysql-8.0.16

root用户更改权限

[root@centos ~]# chown -R mysql:mysql /u01/app/
[root@centos ~]# chmod -R 750 /u01/app/

安装任务

初始化mysql

#初始 3306 的数据库

[root@centos ~]$ /u01/app/mysql-8.0.16/bin/mysqld --initialize --user=mysql --basedir=/u01/app/mysql-8.0.16 --datadir=/u01/app/mysql-8.0.16/data06

#初始 3307 的数据库

[root@centos ~]$ /u01/app/mysql-8.0.16/bin/mysqld --initialize --user=mysql --basedir=/u01/app/mysql-8.0.16 --datadir=/u01/app/mysql-8.0.16/data07

#初始 3308 的数据库

[root@centos ~]$ /u01/app/mysql-8.0.16/bin/mysqld --initialize --user=mysql --basedir=/u01/app/mysql-8.0.16 --datadir=/u01/app/mysql-8.0.16/data08

注意输出的密码,例如:

2019-06-14T03:05:54.583988Z 0 [System] [MY-013169] [Server] /u01/app/mysql/bin/mysqld (mysqld 8.0.16) initializing of server in progress as process 3676
2019-06-14T03:05:58.879961Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: J7e9.eyFWgRq
2019-06-14T03:06:00.912139Z 0 [System] [MY-013170] [Server] /u01/app/mysql/bin/mysqld (mysqld 8.0.16) initializing of server has completed

查看mysql的root用户临时密码

[root@centos tmp]# grep 'temporary password' /var/log/mysqld.log
2019-07-13T08:35:46.078253Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: J7e9.eyFWgRq

开启ssl

# 各实例开启 SSL 连接

# 开启 3306 SSL 连接

[root@centos ~]$ /u01/app/mysql-8.0.16/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/u01/app/mysql-8.0.16 --datadir=/u01/app/mysql-8.0.16/data06# 各实例开启 SSL 连接

# 开启 3307 SSL 连接

[root@centos ~]$ /u01/app/mysql-8.0.16/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/u01/app/mysql-8.0.16 --datadir=/u01/app/mysql-8.0.16/data07

# 各实例开启 SSL 连接

# 开启 3308 SSL 连接

[root@centos ~]$ /u01/app/mysql-8.0.16/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/u01/app/mysql-8.0.16 --datadir=/u01/app/mysql-8.0.16/data08配置

拷贝mysql.server到/etc/init.d/目录下

cp /u01/app/mysql/support-files/mysql.server /etc/init.d/mysql.server

启动mysql

[mysql@centos ~]$ cd /u01/app/mysql/support-files/
[mysql@centos support-files]$ ls
mysqld_multi.server  mysql-log-rotate  mysql.server
 
[mysql@centos support-files]$ ./mysql.server start
Starting MySQL.. SUCCESS!

[mysql@centos ~]$ mysqld_safe --defaults-file=/etc/my.cnf &

登录mysql并更改root用户密码

注意:

更改密码有2种方法:

l  登录mysql,使用ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

l  使用mysql_secure_installation

方法一

[root@centos ~]# mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

方法二

[root@centos ~]# mysql_secure_installation
 
Securing the MySQL server deployment.
 
Enter password for user root: 输入初始化生成的随机密码
 
The existing password for the user account root has expired. Please set a new password.
 
New password: 输入新密码
 
Re-enter new password: 再次输入新密码
 
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
 
Press y|Y for Yes, any other key for No: y
 
There are three levels of password validation policy:
 
LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
 
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Using existing password for root.
 
Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : Y
 
New password: 
 
Re-enter new password: 
 
Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL 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? (Press y|Y for Yes, any other key for No) : 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? (Press y|Y for Yes, any other key for No) : y
Success.
 
By default, MySQL 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? (Press y|Y for Yes, any other key for No) : y
 - 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? (Press y|Y for Yes, any other key for No) : y
Success.
 
All done!

注意:

validate_password是默认安装的。validate_password实现的默认密码策略要求密码包含至少一个大写字母、一个小写字母、一个数字和一个特殊字符,并且总密码长度至少为8个字符。

创建mysqld_multi管理用户

用户mysqld_multi关闭数据库

mysql -u root -S /u01/app/mysql-8.0.16/mysql.sock -p
CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';
GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';

设置root用户环境变量

[root@centos ~]$ vim ~/.bash_profile

添加以下条目:

export PATH=/u01/app/mysql-8.0.16/bin:$PATH

cat >> /root/.bash_profile <<EOF
export PATH=/u01/app/mysql-8.0.16/bin:\$PATH
EOF

使环境变量生效

[root@centos ~]$ source ~/.bash_profile

关闭数据库

mysqladmin -uroot -p shutdown

查看数据库默认配置

[mysql@centos ~]$ mysqld --verbose --help

MySQL社区版Linux RPM包的MySQL安装布局

文件或资源

位置

安装目录base

/u01/app/mysql

客户端程序和脚本

$base/bin

mysqld服务

$base/sbin

配置文件

/etc/my.cnf

数据目录

$base/data

错误日志文件

$base/mysqld.log

secure_file_priv的值

$base/mysql-files

System V初始化脚本

$base/mysql.server

Pid文件

$base/mysqld.pid

Socket

/tmp/mysql.sock

Keyring目录

/var/lib/mysql-keyring

Unix man 文档

$base/man

包括(头)文件

$base/include/mysql

函数库

$base/lib/mysql

杂项支持文件(例如,错误消息和字符集文件)

$base/share/mysql

mysqld_multi进行多实例管理

启动全部实例

mysqld_multi start

关闭全部实例

mysqld_multi stop

查看全部实例状态

mysqld_multi report

启动单个实例

mysqld_multi start  06

停止单个实例

mysqld_multi stop 06

查看单个实例状态

mysqld_multi report 06

启动多个实例

mysqld_multi start 06-07
mysqld_multi start 06,07


相关推荐:

网友留言:

您需要 登录账户 后才能发表评论

我要评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码