MariaDB

MariaDB

二进制安装

当前示列的环境是:centos 7.5 ,MariaDB 10.6.8

所有的安装操作路径都是基于 opt/fs/mdb

官网地址:https://mariadb.com/

下载地址:https://mariadb.org/download/?t=mariadb&p=mariadb&r=10.8.3&os=Linux&cpu=x86_64&pkg=tar_gz&i=systemd&m=blendbyte

上传并解压二进制包

[root@localhost fs]# tar xf mariadb-10.6.8-linux-systemd-x86_64.tar.gz 
[root@localhost fs]# ll
total 336292
drwxrwxr-x 11 lihuatu lihuatu       245 May 19 08:20 mariadb-10.6.8-linux-systemd-x86_64
-rw-r--r--  1 root    root    344360211 Jun  1 11:42 mariadb-10.6.8-linux-systemd-x86_64.tar.gz

创建对应的包

在/opt/fs/mdb目录下创建multiMysql文件夹,并在里面创建mdbConfig,socket,mdebBin,datadir这四个文件夹备用。
现在我们在datadir中创建3个文件夹以放置三个实例的数据文件:3307,3308,3309

[root@localhost fs]# mkdir -p  mdb/multiMysql
[root@localhost fs]# ll
total 336292
drwxrwxr-x 11 lihuatu lihuatu       245 May 19 08:20 mariadb-10.6.8-linux-systemd-x86_64
-rw-r--r--  1 root    root    344360211 Jun  1 11:42 mariadb-10.6.8-linux-systemd-x86_64.tar.gz
drwxr-xr-x  3 root    root           24 Jun  1 12:31 mdb
[root@localhost fs]# mkdir  mdb/multiMysql/{mdbConfig,socket,mdbBin,datadir}
[root@localhost fs]# mkdir mdb/multiMysql/datadir/{3307,3308,3309}
[root@localhost fs]# cd mdb/

查看建立好的文件tree

[root@localhost mdb]# pwd
/opt/fs/mdb
[root@localhost mdb]# tree
.
└── multiMysql
    ├── datadir
    │   ├── 3307
    │   ├── 3308
    │   └── 3309
    ├── mdbConfig
    ├── mdbBin
    └── socket

提前给文件授权

要对/opt/fs/mdb/multiMysql进行递归授权防止之后的操作出现权限不够的情况

[root@localhost mdb]# chmod -R 777 /opt/fs/mdb/multiMysql

实列化数据文件和创建用户组,用户

[root@localhost mdb]# groupadd mysql
[root@localhost mdb]# adduser -g mysql mysql
# 实例化 3307
[root@localhost mdb]# /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/scripts/mysql_install_db --basedir=/opt/fs/mariadb-10.6.8-linux-systemd-x86_64 --datadir=/opt/fs/mdb/multiMysql/datadir/3307 --user=mysql
# 实例化 3308
[root@localhost mdb]# /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/scripts/mysql_install_db --basedir=/opt/fs/mariadb-10.6.8-linux-systemd-x86_64 --datadir=/opt/fs/mdb/multiMysql/datadir/3308 --user=mysql
# 实例化 3309
[root@localhost mdb]# /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/scripts/mysql_install_db --basedir=/opt/fs/mariadb-10.6.8-linux-systemd-x86_64 --datadir=/opt/fs/mdb/multiMysql/datadir/3309 --user=mysql

参数说明:

/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/scripts/mysql_install_db :是我么第一步解压mariadb-10.6.8-linux-systemd-x86_64.tar.gz得到的对应的文件中的指令,因为没有配置环境变量,必须指定解压后的全路径。

–basedir :是指mysql的二进制文件目录,也就是我们解压后的文件目录。

–datadir :是指即将安装到的数据库文件目录,前面的步骤我们提前规划好的目录。

–user:指定的用户,刚刚创建好的用户组和用户 (如果是yum安装则无需自己创建)

查看是否初始化成功

[root@localhost mdb]# ls /opt/fs/mdb/multiMysql/datadir/3307
aria_log.00000001  aria_log_control  ib_buffer_pool  ibdata1  ib_logfile0  mysql  mysql_upgrade_info  performance_schema  sys  test
[root@localhost mdb]# ls /opt/fs/mdb/multiMysql/datadir/3308
aria_log.00000001  aria_log_control  ib_buffer_pool  ibdata1  ib_logfile0  mysql  mysql_upgrade_info  performance_schema  sys  test
[root@localhost mdb]# ls /opt/fs/mdb/multiMysql/datadir/3309
aria_log.00000001  aria_log_control  ib_buffer_pool  ibdata1  ib_logfile0  mysql  mysql_upgrade_info  performance_schema  sys  test
[root@localhost mdb]#

如果里面有文件代表生成成功

创建公共配置

接下来我们来做多实例的配置, 先创建一个公用配置文件

先创建文件和目录

[root@localhost mdb]# mkdir /opt/fs/mdb/multiMysql/mdbConfig/my.cnf.d
[root@localhost mdb]# vim /opt/fs/mdb/multiMysql/mdbConfig/my.cnf.d/my.cnf

文件的内容

[mysqld]
skip-name-resolve
lower_case_table_names=1
innodb_file_per_table=1
back_log = 50
max_connections = 300
max_connect_errors = 1000
table_open_cache = 2048
max_allowed_packet = 16M
binlog_cache_size = 2M
max_heap_table_size = 64M
sort_buffer_size = 2M
join_buffer_size = 2M
thread_cache_size = 64
thread_concurrency = 8
query_cache_size = 64M
query_cache_limit = 2M
ft_min_word_len = 4
default-storage-engine = innodb
thread_stack = 192K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
log-bin=mysql-bin
binlog_format=mixed
slow_query_log
long_query_time = 1
server-id = 1
key_buffer_size = 8M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
innodb_buffer_pool_size = 200M
innodb_data_file_path = ibdata1:10M:autoextend
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 60
innodb_lock_wait_timeout = 120
[mysqldump]
quick
max_allowed_packet = 256M
[mysql]
no-auto-rehash
prompt=\\u@\\d \\R:\\m>
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192

创建三个实例的配置文件

上一步我们将公共的部分抽取到了一个文件中,接下来我们为每一个具体的实列创建自己配置(最配置每个实列都不同的 port,socket…),并且在自己的配置文件中都会引用共同的配置文件

3307

创建文件

[root@localhost mdb]# vim /opt/fs/mdb/multiMysql/mdbConfig/3307.cnf

文件内容

[client]
port = 3307
socket = /opt/fs/mdb/multiMysql/socket/mysql3307.sock
[mysqld]
datadir= /opt/fs/mdb/multiMysql/datadir/3307
port = 3307
socket = /opt/fs/mdb/multiMysql/socket/mysql3307.sock

!includedir /opt/fs/mdb/multiMysql/etc/my.cnf.d

3308

创建文件

[root@localhost mdb]# vim /opt/fs/mdb/multiMysql/mdbConfig/3308.cnf

文件内容

[client]
port = 3308
socket = /opt/fs/mdb/multiMysql/socket/mysql3308.sock
[mysqld]
datadir= /opt/fs/mdb/multiMysql/datadir/3308
port = 3308
socket = /opt/fs/mdb/multiMysql/socket/mysql3308.sock

!includedir /opt/fs/mdb/multiMysql/etc/my.cnf.d

3309

创建文件

[root@localhost mdb]# vim /opt/fs/mdb/multiMysql/mdbConfig/3309.cnf

文件内容

[client]
port = 3309
socket = /opt/fs/mdb/multiMysql/socket/mysql3309.sock
[mysqld]
datadir= /opt/fs/mdb/multiMysql/datadir/3309
port = 3309
socket = /opt/fs/mdb/multiMysql/socket/mysql3309.sock

!includedir /opt/fs/mdb/multiMysql/etc/my.cnf.d

编辑三个启动脚本

新建文件

[root@localhost multiMysql]# vim /opt/fs/mdb/multiMysql/mdbBin/mysql3307

文件内容

#!/bin/bash
mysql_port=3307
mysql_username="root"
mysql_password=""
function_start_mysql()
{
printf "Starting MySQL...\n"
/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysqld_safe --defaults-file=/opt/fs/mdb/multiMysql/mdbConfig/${mysql_port}.cnf 2>&1 > /dev/null &
}
function_stop_mysql()
{
printf "Stoping MySQL...\n"
/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S /opt/fs/mdb/multiMysql/socket/mysql${mysql_port}.sock shutdown
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
function_start_mysql
}
function_kill_mysql()
{
kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}')
kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')
}
case $1 in
start)
function_start_mysql;;
stop)
function_stop_mysql;;
kill)
function_kill_mysql;;
restart)
function_stop_mysql
function_start_mysql;;
*)
echo "Usage: /data/dbdata_${mysql_port}/mysqld {start|stop|restart|kill}";;
esac

参数说明

mysql_port:端口

mysql_username:数据库账户

mysql_password:数据库密码,这里暂时为空,后面会指定

/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysqld_safe:解压二进制文件中对应的mysqld_safe指令(不是yum安装需要指定全路径)

–defaults-file:之前创建好的配置文件

/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysqladmin:解压二进制文件中对应的mysqladmin指令(不是yum安装需要指定全路径)

::🚶 3308 和 3309 的启动脚本只需要同路径下复制 3307的然后修改文件中的 mysql_port 即可。

给三个文件赋予权限

[root@localhost mdbBin]# chmod 777 /opt/fs/mdb/multiMysql/mdbBin/mysql3307
[root@localhost mdbBin]# chmod 777 /opt/fs/mdb/multiMysql/mdbBin/mysql3308
[root@localhost mdbBin]# chmod 777 /opt/fs/mdb/multiMysql/mdbBin/mysql3309

启动三个实列

[root@localhost mdbBin]# /opt/fs/mdb/multiMysql/mdbBin/mysql3307 start
[root@localhost mdbBin]# /opt/fs/mdb/multiMysql/mdbBin/mysql3308 start
[root@localhost mdbBin]# /opt/fs/mdb/multiMysql/mdbBin/mysql3309 start

如果看到以下的日志则表示成功了

[root@localhost mdbBin]# ps -ef | grep mysql
root     15721     1  0 13:46 pts/1    00:00:00 /bin/sh /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysqld_safe --defaults-file=/opt/fs/mdb/multiMysql/mdbConfig/3307.cnf
mysql    15940 15721  0 13:46 pts/1    00:00:00 /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mariadbd --defaults-file=/opt/fs/mdb/multiMysql/mdbConfig/3307.cnf --basedir=/opt/fs/mariadb-10.6.8-linux-systemd-x86_64 --datadir=/opt/fs/mdb/multiMysql/datadir/3307 --plugin-dir=/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/lib/plugin --user=mysql --log-error=/opt/fs/mdb/multiMysql/datadir/3307/localhost.localdomain.err --open-files-limit=8192 --pid-file=localhost.localdomain.pid --socket=/opt/fs/mdb/multiMysql/socket/mysql3307.sock --port=3307
root     15965     1  0 13:47 pts/1    00:00:00 /bin/sh /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysqld_safe --defaults-file=/opt/fs/mdb/multiMysql/mdbConfig/3308.cnf
mysql    16184 15965  0 13:47 pts/1    00:00:00 /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mariadbd --defaults-file=/opt/fs/mdb/multiMysql/mdbConfig/3308.cnf --basedir=/opt/fs/mariadb-10.6.8-linux-systemd-x86_64 --datadir=/opt/fs/mdb/multiMysql/datadir/3308 --plugin-dir=/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/lib/plugin --user=mysql --log-error=/opt/fs/mdb/multiMysql/datadir/3308/localhost.localdomain.err --open-files-limit=8192 --pid-file=localhost.localdomain.pid --socket=/opt/fs/mdb/multiMysql/socket/mysql3308.sock --port=3308
root     16200     1  0 13:47 pts/1    00:00:00 /bin/sh /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysqld_safe --defaults-file=/opt/fs/mdb/multiMysql/mdbConfig/3309.cnf
mysql    16419 16200  0 13:47 pts/1    00:00:00 /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mariadbd --defaults-file=/opt/fs/mdb/multiMysql/mdbConfig/3309.cnf --basedir=/opt/fs/mariadb-10.6.8-linux-systemd-x86_64 --datadir=/opt/fs/mdb/multiMysql/datadir/3309 --plugin-dir=/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/lib/plugin --user=mysql --log-error=/opt/fs/mdb/multiMysql/datadir/3309/localhost.localdomain.err --open-files-limit=8192 --pid-file=localhost.localdomain.pid --socket=/opt/fs/mdb/multiMysql/socket/mysql3309.sock --port=3309
root     16442  5722  0 13:48 pts/1    00:00:00 grep --color=auto mysql
[root@localhost mdbBin]# 

如果启动失败,控制台又没有任何的报错,则前往错误的日志文件查看具体原因【这点很用】,错误的日志文件位置:/opt/fs/mdb/multiMysql/datadir/3307/localhost.localdomain.err【这个文件在我们在实例化数据文件的时候mysql会初始化好的】 然后具体解决即可。

也可以用netstat -ltnp 查看

[root@localhost mdbBin]#  netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      15940/mariadbd      
tcp        0      0 0.0.0.0:3308            0.0.0.0:*               LISTEN      16184/mariadbd      
tcp        0      0 0.0.0.0:3309            0.0.0.0:*               LISTEN      16419/mariadbd      
.........
[root@localhost mdbBin]# 

连接三个实例的sock 并授权远程连接

[root@localhost mdbBin]# /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysql  -u root -S /opt/fs/mdb/multiMysql/socket/mysql3307.sock 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.6.8-MariaDB-log MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
Query OK, 0 rows affected (0.032 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> 

3308 和 3309 重复以上步骤即可。

关闭防火墙或者把3307/3308/3309 的端口开放出去

查看服务器防火墙状态: systemctl status firewalld
直接关闭防火墙:systemctl stop firewalld 
# 开启3307端口
firewall-cmd --zone=public --add-port=3307/tcp --permanent  
# 重启防火墙
firewall-cmd --reload 
# 查看3306端口是否开启
firewall-cmd --query-port=3306/tcp 

Navicat 连接

在这里插入图片描述

关闭数据库

[root@localhost mdbBin]# /opt/fs/mdb/multiMysql/mdbBin/mysql3307 stop
Stoping MySQL...
Enter password: 
[root@localhost mdbBin]# /opt/fs/mdb/multiMysql/mdbBin/mysql3308 stop
Stoping MySQL...
Enter password: 
[root@localhost mdbBin]# /opt/fs/mdb/multiMysql/mdbBin/mysql3309 stop
Stoping MySQL...
Enter password: 

确认关闭

[root@localhost mdbBin]# ps -ef | grep mysql
root     18034  5722  0 16:26 pts/1    00:00:00 grep --color=auto mysql
[root@localhost mdbBin]# 


yum 安装

yum 默认安装

官网下载对应系统的 tar 包

(我这里下载的是centos 7.5 10.8.3 的版本)

download : https://mariadb.com/downloads/

安装前需要将之前的卸载掉
systemctl stop mysqld; # 关闭mysql服务
yum remove mysql; # 移除mysql客户端和服务端
rpm -qa | grep mysql; # 再次确认是否还有依赖没有删除
rpm -e --nodeps +查找到的内容; # 手动删除
mv /var/lib/mysql /var/lib/bak # 备份一下数据库
rm /var/log/mysqld.log # 删除mysql日志

安装步骤
# 解压
#tar -xf  mariadb-10.8.3-rhel-7-aarch64-rpms.tar
#cd mariadb-10.8.3-rhel-7-aarch64-rpms
# 设置仓库
#./setup_repository
# centos默认安装MariaDB 会安装5.5版本的,这个时候需要做以下的修改(修改yum源)
[root@localhost fs]# cd /etc/yum
yum/         yum.repos.d/ 
[root@localhost fs]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ll
total 48
-rw-r--r--. 1 root root 1664 Apr 29  2018 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Apr 29  2018 CentOS-CR.repo
-rw-r--r--. 1 root root  649 Apr 29  2018 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  314 Apr 29  2018 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 Apr 29  2018 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Apr 29  2018 CentOS-Sources.repo
-rw-r--r--. 1 root root 4768 Apr 29  2018 CentOS-Vault.repo
-rw-r--r--. 1 root root 1901 Jul 15  2019 elrepo.repo
-rw-r--r--. 1 root root  951 Oct  3  2017 epel.repo
-rw-r--r--. 1 root root 1050 Oct  3  2017 epel-testing.repo
-rw-r--r--  1 root root  254 May 30 17:43 mariadb.repo #./setup_repository的操作就是为了生成这个文件
[root@localhost yum.repos.d]# vim mariadb.repo 

[MariaDB]
name = MariaDB
#baseurl = file:///opt/fs/mariadb-10.8.3-rhel-7-aarch64-rpms
baseurl = http://yum.mariadb.org/10.8/centos7-amd64
gpgkey = https://downloads.mariadb.com/MariaDB/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enabled = 1
module_hotfixes = 1
# 重新生成缓存
#yum clean all && yum makecache
# 安装
#yum install MariaDB-server MariaDB-client -y
# 启动
systemctl start mariadb  # 启动
systemctl status mariadb  # 查看状态
# 数据库初始化 (mysql_secure_installation 从10.5.2开始已经由mariadb-secure-installation命令替换)
/usr/bin/mariadb-secure-installation
1. 输入密码: 123456
2. 转换为unix_socket认证:n
3. 改变root密码:n
4. 是否禁止匿名登录: y
5. 禁止远程登录: n
6. 是否移除test数据库权限: n
7. 是否立即生效: y
# 配置远程登录
mysql -uroot -p123456
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;
systemctl restart mysqld;
# Navicat等工具连接即可

在这里插入图片描述

默认安装相关文件路径

默认安装时,会在/etc目录下生成my.cnf文件及my.cnf.d文件夹用于存放数据库配置,默认会将my.cnf.d下所有的 .cnf都当成配置文件加载

[root@localhost etc]# cd my.cnf.d/
[root@localhost my.cnf.d]# ll
total 20
-rw-r--r-- 1 root root  295 May 18 19:30 client.cnf
-rw-r--r-- 1 root root  763 May 18 19:30 enable_encryption.preset
-rw-r--r-- 1 root root  232 May 18 19:30 mysql-clients.cnf
-rw-r--r-- 1 root root 1080 May 18 19:30 server.cnf
-rw-r--r-- 1 root root  120 May 18 19:30 spider.cnf
[root@localhost my.cnf.d]# pwd
/etc/my.cnf.d
[root@localhost my.cnf.d]# 

存储目录默认在/var/lib/mysql下

字符集设置

# 设置MariaDB字符集为utf-8
/etc/my.cnf.d/server.cnf 文件,在 [mysqld]  标签下添加
character-set-server=utf8
 /etc/my.cnf.d/mysql-clients.cnf  文件,在  [mysql]  标签下添加
default-character-set=utf8
# 重启服务
#systemctl restart mariadb
# 进入mariadb查看字符集
命令show variables like "%character%";show variables like "%collation%";
# 设置数据库字母大小写不敏感
vi /etc/my.cnf.d/server.cnf
在[mysqld]下加上
lower_case_table_names=1
默认是等于0的,即大小写敏感。改成1就OK了。如果之前已经建了数据库要把之前建立的数据库删除,重建才生效

yum 自定义配置文件多实列安装

默认的相关路径

在创建多实例之前,先搞清楚yum安装好的mariadb的目录结构:
1、数据库目录
/var/lib/mysql/
2、配置文件
/usr/share/mysql(mysql.server命令及配置文件)mysql5.5之后的默认安装路径,mysql5.5之前的是/usr/local/mysql
3、相关命令
/usr/bin(mysqladmin mysqldump等命令)
4、启动脚本
/etc/rc.d/init.d/(启动脚本文件mysql的目录)

此时启动,关闭mysql 可以用:

/etc/init.d/mysql start/stop

service mariadb start/stop
过程概述
  1. 新建数据目录
  2. 创建用户,给数据目录授权(最好不要再已经存在的其他用户下创建数据目录)
  3. 初始化数据库
  4. 创建配置文件
  5. 创建自动启动文件

(备注:创建启动文件这一步可有可无,因为可以通过命令来搞定 mysqld_safe --defaults-file=/data/dbdata_${mysql_port}/my.cnf 2>&1 > /dev/null & )

搭建步骤
创建相关目录

在/home目录下创建multiMysql文件夹,并在里面创建etc,socket,bin,datadir这四个文件夹备用。
现在我们在datadir中创建3个文件夹以放置三个实例的数据文件:3307,3308,3309

[root@localhost home]# mkdir /home/multiMysql
[root@localhost home]# mkdir /home/multiMysql/{etc,socket,bin,datadir}

[root@localhost multiMysql]# mkdir /home/multiMysql/datadir/{3307,3308,3309}
文件授权和实列化数据文件

然后用mysql_install_db来生成即将使用的多个实例的数据文件,首先需要对/home/multiMysql进行递归授权防止之后的操作出现权限不够的情况:

chmod -R 777 /home/multiMysql
mysql_install_db --basedir=/usr --datadir=/home/multiMysql/datadir/3307 --user=mysql
mysql_install_db --basedir=/usr --datadir=/home/multiMysql/datadir/3308 --user=mysql
mysql_install_db --basedir=/usr --datadir=/home/multiMysql/datadir/3309 --user=mysql

其中的参数–basedir是指mysql的二进制文件目录,–datadir是指即将安装到的数据库文件目录,如果不知道–basedir该怎么填,可以登录进mysql后查询(前面我们已经通过yum默认安装过了):

MariaDB [(none)]> show variables like '%basedir%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| basedir     | /usr |
+---------------+-------+
1 row in set (0.00 sec)

–user是指mysql实例将使用的在linux系统中的用户,最好命名为mysql,yum安装后一般都有这个用户,如果没有可以自主创建

groupadd mysql
adduser -g mysql mysql

现在来查看三份数据文件有没有生成,例如查看3308的

[root@localhost multiMysql]# ls /home/multiMysql/datadir/3308/
aria_log.00000001  aria_log_control  mysql  performance_schema  test

如果里面有文件代表生成成功。

多实例的配置

接下来我们来做多实例的配置, 先创建一个公用配置文件

mkdir /home/multiMysql/etc/my.cnf.d/
vim /home/multiMysql/etc/my.cnf.d/my.cnf

具体的配置如下,完整的配置可以参考默认安装中的

[mysqld]
skip-name-resolve
lower_case_table_names=1
innodb_file_per_table=1
back_log = 50
max_connections = 300
max_connect_errors = 1000
table_open_cache = 2048
max_allowed_packet = 16M
binlog_cache_size = 2M
max_heap_table_size = 64M
sort_buffer_size = 2M
join_buffer_size = 2M
thread_cache_size = 64
thread_concurrency = 8
query_cache_size = 64M
query_cache_limit = 2M
ft_min_word_len = 4
default-storage-engine = innodb
thread_stack = 192K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
log-bin=mysql-bin
binlog_format=mixed
slow_query_log
long_query_time = 1
server-id = 1
key_buffer_size = 8M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
innodb_buffer_pool_size = 200M
innodb_data_file_path = ibdata1:10M:autoextend
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 60
innodb_lock_wait_timeout = 120
[mysqldump]
quick
max_allowed_packet = 256M
[mysql]
no-auto-rehash
prompt=\\u@\\d \\R:\\m>
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192

创建每一个实列的具体配置

然后分别创建三个实例的配置文件:每个配置文件的公共部分上一步my.cnf已经抽取出来了,每个不同的部分(比如端口等信息)分别配置。

[root@localhost etc]# vim 3307.cnf 
[client]
port = 3307
socket = /home/multiMysql/socket/mysql3307.sock
[mysqld]
datadir=/home/multiMysql/datadir/3307
port = 3307
socket = /home/multiMysql/socket/mysql3307.sock

!includedir /home/multiMysql/etc/my.cnf.d

然后把3307.cnf复制两份:

[root@localhost etc]# cp 3307.cnf 3308.cnf
[root@localhost etc]# cp 3307.cnf 3309.cnf

然后分别编辑复制的两份配置文件,把端口和socket进行修改:

[root@localhost etc]# vim 3308.cnf 
[client]
port = 3308
socket = /home/multiMysql/socket/mysql3308.sock
[mysqld]
datadir=/home/multiMysql/datadir/3308
port = 3308
socket = /home/multiMysql/socket/mysql3308.sock

!includedir /home/multiMysql/etc/my.cnf.d

[root@localhost etc]# vim 3309.cnf 

[client]
port = 3309
socket = /home/multiMysql/socket/mysql3309.sock
[mysqld]
datadir=/home/multiMysql/datadir/3309
port = 3309
socket = /home/multiMysql/socket/mysql3309.sock

!includedir /home/multiMysql/etc/my.cnf.d

在配置文件中,port是实例的端口,socket是实例运行时的sock文件,datadir是之前我们生成的数据库文件位置。

编辑启动脚本

然后我们来编辑三个启动脚本

[root@localhost bin]# vim /home/multiMysql/bin/mysql3307
#!/bin/bash
mysql_port=3307
mysql_username="root"
mysql_password=""
function_start_mysql()
{
printf "Starting MySQL...\n"
mysqld_safe --defaults-file=/home/multiMysql/etc/${mysql_port}.cnf 2>&1 > /dev/null &
}
function_stop_mysql()
{
printf "Stoping MySQL...\n"
mysqladmin -u ${mysql_username} -p${mysql_password} -S /home/multiMysql/socket/mysql${mysql_port}.sock shutdown
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
function_start_mysql
}
function_kill_mysql()
{
kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}')
kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')
}
case $1 in
start)
function_start_mysql;;
stop)
function_stop_mysql;;
kill)
function_kill_mysql;;
restart)
function_stop_mysql
function_start_mysql;;
*)
echo "Usage: /data/dbdata_${mysql_port}/mysqld {start|stop|restart|kill}";;
esac
[root@localhost bin]# vim /home/multiMysql/bin/mysql3308
#!/bin/bash
mysql_port=3308
mysql_username="root"
mysql_password=""
function_start_mysql()
{
printf "Starting MySQL...\n"
mysqld_safe --defaults-file=/home/multiMysql/etc/${mysql_port}.cnf 2>&1 > /dev/null &
}
function_stop_mysql()
{
printf "Stoping MySQL...\n"
mysqladmin -u ${mysql_username} -p${mysql_password} -S /home/multiMysql/socket/mysql${mysql_port}.sock shutdown
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
function_start_mysql
}
function_kill_mysql()
{
kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}')
kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')
}
case $1 in
start)
function_start_mysql;;
stop)
function_stop_mysql;;
kill)
function_kill_mysql;;
restart)
function_stop_mysql
function_start_mysql;;
*)
echo "Usage: /data/dbdata_${mysql_port}/mysqld {start|stop|restart|kill}";;
esac
[root@localhost bin]# vim /home/multiMysql/bin/mysql3309
#!/bin/bash
mysql_port=3309
mysql_username="root"
mysql_password=""
function_start_mysql()
{
printf "Starting MySQL...\n"
mysqld_safe --defaults-file=/home/multiMysql/etc/${mysql_port}.cnf 2>&1 > /dev/null &
}
function_stop_mysql()
{
printf "Stoping MySQL...\n"
mysqladmin -u ${mysql_username} -p${mysql_password} -S /home/multiMysql/socket/mysql${mysql_port}.sock shutdown
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
function_start_mysql
}
function_kill_mysql()
{
kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}')
kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')
}
case $1 in
start)
function_start_mysql;;
stop)
function_stop_mysql;;
kill)
function_kill_mysql;;
restart)
function_stop_mysql
function_start_mysql;;
*)
echo "Usage: /data/dbdata_${mysql_port}/mysqld {start|stop|restart|kill}";;
esac

因为是yum安装,所以mysqld_safe和mysqladmin可以不用加路径直接运行,另外mysql_port是指这个bash简要打开的实例的端口,mysql_username和mysql_userpassword为我们即将在实例中配置的可关闭mysql进程的mysql用户名和密码。

执行启动脚本

现在给三个bash文件权限来执行,并尝试打开三个实例:

[root@localhost bin]# chmod 777 /home/multiMysql/bin/mysql3307
[root@localhost bin]# chmod 777 /home/multiMysql/bin/mysql3308
[root@localhost bin]# chmod 777 /home/multiMysql/bin/mysql3309

先关闭yum安装的默认mysql实例进程

service mariadb stop
或者
systemctl stop mariadb

启动三个实例

[root@localhost bin]# /home/multiMysql/bin/mysql3307 start
[root@localhost bin]# /home/multiMysql/bin/mysql3308 start
[root@localhost bin]# /home/multiMysql/bin/mysql3309 start

查看是否有三个mysql进程

[root@localhost bin]# ps -ef | grep mysql
root      47013      1  0 19:57 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/home/multiMysql/etc/3307.cnf
mysql     47680  47013  2 19:57 pts/0    00:00:04 /usr/libexec/mysqld --defaults-file=/home/multiMysql/etc/3307.cnf --basedir=/usr --datadir=/home/multiMysql/datadir/3307 --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/home/multiMysql/datadir/3307/localhost.localdomain.err --open-files-limit=8192 --pid-file=localhost.localdomain.pid --socket=/home/multiMysql/socket/mysql3307.sock --port=3307
root      50504      1  0 20:00 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/home/multiMysql/etc/3308.cnf
mysql     51183  50504  9 20:00 pts/0    00:00:03 /usr/libexec/mysqld --defaults-file=/home/multiMysql/etc/3308.cnf --basedir=/usr --datadir=/home/multiMysql/datadir/3308 --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/home/multiMysql/datadir/3308/localhost.localdomain.err --open-files-limit=8192 --pid-file=localhost.localdomain.pid --socket=/home/multiMysql/socket/mysql3308.sock --port=3308
root      51224      1  0 20:00 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/home/multiMysql/etc/3309.cnf
mysql     51952  51224  2 20:00 pts/0    00:00:00 /usr/libexec/mysqld --defaults-file=/home/multiMysql/etc/3309.cnf --basedir=/usr --datadir=/home/multiMysql/datadir/3309 --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/home/multiMysql/datadir/3309/localhost.localdomain.err --open-files-limit=8192 --pid-file=localhost.localdomain.pid --socket=/home/multiMysql/socket/mysql3309.sock --port=3309
root      52445   3644  0 20:01 pts/0    00:00:00 grep --color=auto mysql

如果启动失败,控制台又没有任何的报错,则前往错误的日志文件查看具体原因【这点很用】,错误的日志文件位置:/home/multiMysql/datadir/3307/localhost.localdomain.err【这个文件在我们本步骤中的第二步实例化数据文件的时候mysql会初始化好的】 然后具体解决即可。

如果成功,则可以看到三个实例已经启动,我们来尝试连接三个实例的sock

[root@localhost bin]# mysql -u root -S /home/multiMysql/socket/mysql3307.sock 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.52-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> quit
Bye
[root@localhost bin]# mysql -u root -S /home/multiMysql/socket/mysql3308.sock 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.52-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> quit
Bye
[root@localhost bin]# mysql -u root -S /home/multiMysql/socket/mysql3309.sock 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.52-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> quit
Bye

可见三个实例已经启动,可以进每个实例后查看当前实例的端口以确认是否成功打开实例:

例如连接3307的sock后执行sql

MariaDB [(none)]> show variables like '%port%';
+-------------------------------------+-------+
| Variable_name                       | Value |
+-------------------------------------+-------+
| extra_port                          | 0     |
| innodb_import_table_from_xtrabackup | 0     |
| innodb_support_xa                   | ON    |
| large_files_support                 | ON    |
| port                                | 3307  |
| progress_report_time                | 5     |
| report_host                         |       |
| report_password                     |       |
| report_port                         | 3307  |
| report_user                         |       |
+-------------------------------------+-------+
10 rows in set (0.00 sec)
远程连接

如果一切顺利的话。下一步尝试远程连接mysql实例,连接之前先开放远程连接的权限和关闭防火墙(或者开放对应的端口)。在服务器中分别sock连接三个数据库并创建用户权限:

MariaDB [(none)]> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
MariaDB [(none)]> flush privileges;

grant是权限授予,all privileges表示授予所有权限,on表示授予的操作对象,*.*表示所有数据库的所有表,to表示授予的对象‘root’@'%'表示任意主机的root登录用户,identified by '123456’表示设置密码为123456。

flush privileges表示刷新用户权限,不刷新的话权限是不会立刻生效的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ieWeepo-1654171673478)(MariaDB.assets/image-20220531212522384.png)]

关闭实例
[root@localhost bin]# /home/multiMysql/bin/mysql3307 stop
[root@localhost bin]# /home/multiMysql/bin/mysql3308 stop
[root@localhost bin]# /home/multiMysql/bin/mysql3309 stop

然后查看进程是否成功关闭:

[root@localhost bin]# ps -ef | grep mysql
root      74999   3644  0 20:27 pts/0    00:00:00 grep --color=auto mysql

如果未能成功关闭,说明是bash文件中用户名密码对应mysql实例里的用户密码权限不够或错误,调整权限即可。至此,三个mysql实例创建到此结束。


MariaDB主从搭建

提前规划:192.168.17.177(主) 192.168.17.179 (从) 的一主一从的MariaDB

master 搭建

将压缩包上传到 /opt/fs 并解压
 tar xf mariadb-10.6.8-linux-systemd-x86_64.tar.gz
提前创建好以下目录备用
[root@localhost fs]# mkdir mdb
[root@localhost fs]# mkdir -p mdb/multiMysql/{mdbConfig,socket,mdbBin,datadir}
[root@localhost fs]# mkdir mdb/multiMysql/datadir/3307
[root@localhost fs]# pwd
/opt/fs
[root@localhost fs]# cd mdb/
[root@localhost mdb]# tree
.
└── multiMysql
    ├── datadir
    │   └── 3307
    ├── mdbConfig
    ├── mdbBin
    └── socket

6 directories, 0 files
[root@localhost mdb]# 

提前给文件授权

[root@localhost mdb]# chmod -R 777 /opt/fs/mdb/multiMysql
实列化数据文件和创建用户组,用户
[root@localhost mdb]# groupadd mysql
[root@localhost mdb]# adduser -g mysql mysql
[root@localhost mdb]# /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/scripts/mysql_install_db --basedir=/opt/fs/mariadb-10.6.8-linux-systemd-x86_64 --datadir=/opt/fs/mdb/multiMysql/datadir/3307 --user=mysql

参数说明:

/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/scripts/mysql_install_db :是我么第一步解压mariadb-10.6.8-linux-systemd-x86_64.tar.gz得到的对应的文件中的指令,因为没有配置环境变量,必须指定解压后的全路径。

–basedir :是指mysql的二进制文件目录,也就是我们解压后的文件目录。

–datadir :是指即将安装到的数据库文件目录,前面的步骤我们提前规划好的目录。

–user:指定的用户,刚刚创建好的用户组和用户 (如果是yum安装则无需自己创建)

查看是否初始化成功
[root@localhost 3310]# ls /opt/fs/mdb/multiMysql/datadir/3307
aria_log.00000001  aria_log_control  ib_buffer_pool  ibdata1  ib_logfile0  mysql  mysql_upgrade_info  performance_schema  sys  test
[root@localhost 3310]# mkdir /opt/fs/mdb/multiMysql/mdbConfig/my.cnf.d
[root@localhost 3310]# vim /opt/fs/mdb/multiMysql/mdbConfig/my.cnf.d/my.cnf

如果里面有文件代表生成成功

创建公共配置

先创建一个公用配置文件方便共同的配置能复用

先创建文件和目录

[root@localhost mdb]# mkdir /opt/fs/mdb/multiMysql/mdbConfig/my.cnf.d
[root@localhost mdb]# vim /opt/fs/mdb/multiMysql/mdbConfig/my.cnf.d/my.cnf

文件的内容

[mysqld]
skip-name-resolve
lower_case_table_names=1
innodb_file_per_table=1
back_log = 50
max_connections = 300
max_connect_errors = 1000
table_open_cache = 2048
max_allowed_packet = 16M
binlog_cache_size = 2M
max_heap_table_size = 64M
sort_buffer_size = 2M
join_buffer_size = 2M
thread_cache_size = 64
thread_concurrency = 8
query_cache_size = 64M
query_cache_limit = 2M
ft_min_word_len = 4
default-storage-engine = innodb
thread_stack = 192K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
log-bin=mysql-bin
binlog_format=mixed
slow_query_log
long_query_time = 1
key_buffer_size = 8M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
innodb_buffer_pool_size = 200M
innodb_data_file_path = ibdata1:10M:autoextend
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 60
innodb_lock_wait_timeout = 120
[mysqldump]
quick
max_allowed_packet = 256M
[mysql]
no-auto-rehash
prompt=\\u@\\d \\R:\\m>
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192
创建具体实例的配置文件

上一步我们将公共的部分抽取到了一个文件中,接下来我们为具体的实列创建自己配置(配置每个实列都不同的 port,socket…),并且在自己的配置文件中都会引用共同的配置文件,当然本次搭建一主一从,也只会有一个。

3307

创建文件

[root@localhost mdb]# vim /opt/fs/mdb/multiMysql/mdbConfig/3307.cnf

文件内容

[client]
port = 3307
socket = /opt/fs/mdb/multiMysql/socket/mysql3307.sock
[mysqld]
datadir= /opt/fs/mdb/multiMysql/datadir/3307
port = 3307
socket = /opt/fs/mdb/multiMysql/socket/mysql3307.sock
log_bin=master-bin     # 设置日志名称
server_id=10           # 设置在当前集群中唯一的server_id 不能和master以及其他slave重复

!includedir /opt/fs/mdb/multiMysql/etc/my.cnf.d

log_bin=master-bin # 设置日志名称
server_id=10 # 设置在当前集群中唯一的server_id

当前是两个配置是开启主从的关键配置,其中server_id要保证唯一性,并且保证我们3307.cnf和/my.cnf.d下所有的 *.cnf文件中有且仅有一个server_id,否则后面slave启动会出现 Slave_IO_Running: No

编辑master的启动脚本

新建文件

[root@localhost multiMysql]# vim /opt/fs/mdb/multiMysql/mdbBin/mysql3307

文件内容

#!/bin/bash
mysql_port=3307
mysql_username="root"
mysql_password=""
function_start_mysql()
{
printf "Starting MySQL...\n"
/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysqld_safe --defaults-file=/opt/fs/mdb/multiMysql/mdbConfig/${mysql_port}.cnf 2>&1 > /dev/null &
}
function_stop_mysql()
{
printf "Stoping MySQL...\n"
/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S /opt/fs/mdb/multiMysql/socket/mysql${mysql_port}.sock shutdown
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
function_start_mysql
}
function_kill_mysql()
{
kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}')
kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')
}
case $1 in
start)
function_start_mysql;;
stop)
function_stop_mysql;;
kill)
function_kill_mysql;;
restart)
function_stop_mysql
function_start_mysql;;
*)
echo "Usage: /data/dbdata_${mysql_port}/mysqld {start|stop|restart|kill}";;
esac

参数说明

mysql_port:端口

mysql_username:数据库账户

mysql_password:数据库密码,这里暂时为空,后面会指定

/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysqld_safe:解压二进制文件中对应的mysqld_safe指令(不是yum安装需要指定全路径)

–defaults-file:之前创建好的配置文件

/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysqladmin:解压二进制文件中对应的mysqladmin指令(不是yum安装需要指定全路径)

给master启动脚本赋予权限
[root@localhost mdbBin]# chmod 777 /opt/fs/mdb/multiMysql/mdbBin/mysql3307
启动master实列
[root@localhost mdbBin]# /opt/fs/mdb/multiMysql/mdbBin/mysql3307 start

如果看到以下的日志则表示成功了

[root@localhost mdbBin]# ps -ef | grep mysql
root     15721     1  0 13:46 pts/1    00:00:00 /bin/sh /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysqld_safe --defaults-file=/opt/fs/mdb/multiMysql/mdbConfig/3307.cnf
mysql    15940 15721  0 13:46 pts/1    00:00:00 /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mariadbd --defaults-file=/opt/fs/mdb/multiMysql/mdbConfig/3307.cnf --basedir=/opt/fs/mariadb-10.6.8-linux-systemd-x86_64 --datadir=/opt/fs/mdb/multiMysql/datadir/3307 --plugin-dir=/opt/fs/mariadb-10.6.8-linux-systemd-x86_64/lib/plugin --user=mysql --log-error=/opt/fs/mdb/multiMysql/datadir/3307/localhost.localdomain.err --open-files-limit=8192 --pid-file=localhost.localdomain.pid --socket=/opt/fs/mdb/multiMysql/socket/mysql3307.sock --port=3307

如果启动失败,控制台又没有任何的报错,则前往错误的日志文件查看具体原因【这点很用】,错误的日志文件位置:/opt/fs/mdb/multiMysql/datadir/3307/localhost.localdomain.err【这个文件在我们在实例化数据文件的时候mysql会初始化好的】 然后具体解决即可。

使用mysql命令进入数据库
[root@localhost mdbConfig]# /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysql -u root -S /opt/fs/mdb/multiMysql/socket/mysql3307.sock 
创建一个有复制权限账号
[root@localhost mdbConfig]# /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysql -u root -S /opt/fs/mdb/multiMysql/socket/mysql3307.sock 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.6.8-MariaDB-log MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> grant  replication  slave  on  *.*  to  'replicater'@'%'  identified  by '123456';
Query OK, 0 rows affected (0.020 sec)
查看状态和二进制日志号

MariaDB [(none)]> show master status\G
*************************** 1. row ***************************
            File: mysql-bin.000002
        Position: 544
    Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 row in set (0.000 sec)

MariaDB [(none)]> 


slave 搭建

slave的搭建和master基本一样,重复上面的步骤,不同的配置如下

具体的配置文件不同
[root@localhost mdb]# vim /opt/fs/mdb/multiMysql/mdbConfig/3307.cnf

文件内容

[client]
port = 3307
socket = /opt/fs/mdb/multiMysql/socket/mysql3307.sock
[mysqld]
datadir= /opt/fs/mdb/multiMysql/datadir/3307
port = 3307
socket = /opt/fs/mdb/multiMysql/socket/mysql3307.sock
log_bin=master-bin     # 设置日志名称
server_id=20           # 设置在当前集群中唯一的server_id,不能和master以及其他slave重复

!includedir /opt/fs/mdb/multiMysql/etc/my.cnf.d

启动slave
[root@localhost mdbConfig]# /opt/fs/mdb/multiMysql/mdbBin/mysql3307 start
Starting MySQL...

使用mysql命令进入数据库

[root@localhost mdbConfig]# /opt/fs/mdb/multiMysql/mdbBin/mysql3307 start
Starting MySQL...
[root@localhost mdbConfig]# /opt/fs/mariadb-10.6.8-linux-systemd-x86_64/bin/mysql  -u root -S /opt/fs/mdb/multiMysql/socket/mysql3307.sock 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.6.8-MariaDB-log MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

使用有复制权限用户账号连接至主服务器,设置主服务器信息和同步起点信息

MariaDB [(none)]> change master to master_host='192.168.17.177',
    -> master_user='replicater',
    -> master_password='123456',
    -> master_port=3307,
    -> master_log_file='mysql-bin.000003',
    -> master_log_pos=342;
Query OK, 0 rows affected (0.033 sec)

change master to master_host=‘192.168.17.177’, 主服务器(master)的IP地址

master_user=‘replicater’, 主服务器上授权复制的用户名

master_password=‘123456’, 主服务器上授权用户的密码

master_log_file=‘mysql-bin.000003’, 主服务器上的日志文件

master_port=3307 主服务器(master)的端口

master_log_pos=342; 主服务器上的日志偏移位置

启动slave服务并查看slave服务器状态
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.17.177
                   Master_User: replicater
                   Master_Port: 3307
                 Connect_Retry: 60
               Master_Log_File: mysql-bin.000003
           Read_Master_Log_Pos: 342
                Relay_Log_File: localhost-relay-bin.000002
                 Relay_Log_Pos: 555
         Relay_Master_Log_File: mysql-bin.000003
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes
               Replicate_Do_DB: 
           Replicate_Ignore_DB: 
            Replicate_Do_Table: 
        Replicate_Ignore_Table: 
       Replicate_Wild_Do_Table: 
   Replicate_Wild_Ignore_Table: 
                    Last_Errno: 0
                    Last_Error: 
                  Skip_Counter: 0
           Exec_Master_Log_Pos: 342
               Relay_Log_Space: 868
               Until_Condition: None
                Until_Log_File: 
                 Until_Log_Pos: 0
            Master_SSL_Allowed: No
            Master_SSL_CA_File: 
            Master_SSL_CA_Path: 
               Master_SSL_Cert: 
             Master_SSL_Cipher: 
                Master_SSL_Key: 
         Seconds_Behind_Master: 0
 Master_SSL_Verify_Server_Cert: No
                 Last_IO_Errno: 0
                 Last_IO_Error: 
                Last_SQL_Errno: 0
                Last_SQL_Error: 
   Replicate_Ignore_Server_Ids: 
              Master_Server_Id: 10
                Master_SSL_Crl: 
            Master_SSL_Crlpath: 
                    Using_Gtid: No
                   Gtid_IO_Pos: 
       Replicate_Do_Domain_Ids: 
   Replicate_Ignore_Domain_Ids: 
                 Parallel_Mode: optimistic
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
              Slave_DDL_Groups: 2
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 1
1 row in set (0.000 sec)

MariaDB [(none)]> 

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

以上两个核心参数 为 Yes 则基本启动ok

同步测试

master服务器创建数据,测试同步效果
master服务器创建测试数据

查看当前master数据库现有库
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.001 sec)


master创建库, 建表, 并插入数据

创建库,名为a:create database a;

MariaDB [(none)]> create database a;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> use a;
Database changed
MariaDB [a]> create table a1(id int,
    -> name varchar(10),
    -> age int);
Query OK, 0 rows affected (0.566 sec)

MariaDB [a]> insert into a1 values(1,'Tom',10);
Query OK, 1 row affected (0.016 sec)

MariaDB [a]> select * from a1;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | Tom  |   10 |
+------+------+------+
1 row in set (0.000 sec)
slave服务器查看 数据库,表信息
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| a                  |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
6 rows in set (0.001 sec)

MariaDB [(none)]> use a;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [a]> select * from a1;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | Tom  |   10 |
+------+------+------+
1 row in set (0.000 sec)

MariaDB [a]> 

此时可以看到多出表a1

Navicat 查看操作

分别连上master:192.168.17.177:3307 slave :192.168.17.179:3307

在Navicat上master执行sql 脚本

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for device
-- ----------------------------
DROP TABLE IF EXISTS `device`;
CREATE TABLE `device`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `device_describe` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `create_time` datetime(0) NULL DEFAULT NULL,
  `update_time` datetime(0) NULL DEFAULT NULL,
  `create_user_id` bigint(20) NULL DEFAULT NULL,
  `update_user_id` bigint(20) NULL DEFAULT NULL,
  `del_flag` tinyint(1) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

atabase |
±-------------------+
| a |
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
±-------------------+
6 rows in set (0.001 sec)

MariaDB [(none)]> use a;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [a]> select * from a1;
±-----±-----±-----+
| id | name | age |
±-----±-----±-----+
| 1 | Tom | 10 |
±-----±-----±-----+
1 row in set (0.000 sec)

MariaDB [a]>


>  此时可以看到多出表a1

#### Navicat 查看操作

分别连上master:192.168.17.177:3307  slave :192.168.17.179:3307

在Navicat上master执行sql 脚本

```sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for device
-- ----------------------------
DROP TABLE IF EXISTS `device`;
CREATE TABLE `device`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `device_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `device_describe` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `create_time` datetime(0) NULL DEFAULT NULL,
  `update_time` datetime(0) NULL DEFAULT NULL,
  `create_user_id` bigint(20) NULL DEFAULT NULL,
  `update_user_id` bigint(20) NULL DEFAULT NULL,
  `del_flag` tinyint(1) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

[外链图片转存中...(img-uIbGzcSA-1654171673479)]

至此主从搭建完毕 !

脚本安装单实例

前置说明,本次案列准备了两台机器17.178(构建mariadbServer.tar) 和 17.180(测试构建好的mariadbServer.tar)

目录和脚本准备

在17.178的节点准备目录 /cloudsure/mariadb, 后面的脚本也是基于这个目录写的,如果要修改的话,脚本也是需要对应修改的。并将my.cnf , mariadbInit.sh,mariadbService.sh, mariadb-10.6.8-linux-systemd-x86_64.tar.gz 放置到 /cloudsure/mariadb目录下

my.cnf

[client]
port = 3306
socket = /cloudsure/mariadb/mariadb-10.6.8-linux-systemd-x86_64/data/socket/mysql3306.sock
[mysqld]
datadir= /cloudsure/mariadb/mariadb-10.6.8-linux-systemd-x86_64/data
port = 3306
socket = /cloudsure/mariadb/mariadb-10.6.8-linux-systemd-x86_64/data/socket/mysql3306.sock
skip-name-resolve
lower_case_table_names=1
innodb_file_per_table=1
back_log = 50
max_connections = 300
max_connect_errors = 1000
table_open_cache = 2048
max_allowed_packet = 16M
binlog_cache_size = 2M
max_heap_table_size = 64M
sort_buffer_size = 2M
join_buffer_size = 2M
thread_cache_size = 64
thread_concurrency = 8
query_cache_size = 64M
query_cache_limit = 2M
ft_min_word_len = 4
default-storage-engine = innodb
thread_stack = 192K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
log-bin=mysql-bin
binlog_format=mixed
slow_query_log
long_query_time = 1
server-id = 1
key_buffer_size = 8M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
innodb_buffer_pool_size = 200M
innodb_data_file_path = ibdata1:10M:autoextend
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 16M
innodb_log_file_size = 512M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 60
innodb_lock_wait_timeout = 120
[mysqldump]
quick
max_allowed_packet = 256M
[mysql]
no-auto-rehash
prompt=\\u@\\d \\R:\\m>
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192

my.cnf 是mariadb的配置文件,约定放到当前的目录下,将会在mariadbInit.sh中将此配置cope到解压后放到mariadb-10.6.8-linux-systemd-x86_64/conf目录中,作为后面实列的配置文件

mariadbInit.sh

#!/bin/bash

current_user=$USER
# 申明二进制文件名称
mariadb_name="mariadb-10.6.8-linux-systemd-x86_64.tar.gz"
# 申明所有操作的根目录,/clouidsure/mariadb/
mariadb_base_dir="/cloudsure/mariadb/"
# 数据库配置文件
my_cnf="my.cnf"
mk_data="data"
mk_conf="conf"
mk_socket="socket"
mk_log="log"
mk_pid="pid"

printf "mariadb init starting -------------- \n"

# 前置检查
function pre_check(){
printf "Pre check directory file check ------------- \n"
    # 检查约定好的文件夹是否有建立好
    [ ! -d $mariadb_base_dir ] && echo "$mariadb_base_dir directory does not exist!" && exit
    # 检查二进制文件是否放到指定位置
    [ ! -f $mariadb_base_dir$mariadb_name ] && echo "$mariadb_base_dir$mariadb_name file does not exist!" && exit
}


# 用户权限检查
function user_check(){
    printf "User permission check ------------ \n"
    if [ $current_user != 'root' ];then
      echo "This user is not root. Before installing the database, you need to uninstall the system's own MariaDB and mysql. Please use root to uninstall and then execute the script!"
     else
       echo "Current user is $current_user"
    fi

}

# 解压二进制包,并创建对应的目录
function decompress_and_create_dir(){
    printf "Unzip the binary package and create the corresponding directory \n"
    # cd到操作目录,并解压对应的二进制包
    cd $mariadb_base_dir
    tar -zxf $mariadb_name >/dev/null 2>&1
    ls
    decompress_path=${mariadb_name%.tar.gz*}
    printf "Unzipped directory:$decompress_path  \n"
    # 在解压后得文件夹下新家data 目录 (mysql.log, mysql.pid, mysql.socket)
    cd $decompress_path
    pwd
    mkdir $mk_data
    mkdir $mk_conf
    cd $mk_data
    mkdir $mk_socket
    mkdir $mk_log
    mkdir $mk_pid
     # 在解压后得文件夹下新建 conf 目录存放配置文件,将之前放好的配置复制到当前的目录下。
    cp $mariadb_base_dir$my_cnf $mariadb_base_dir$decompress_path"/"$mk_conf
    chmod -R 777 $mariadb_base_dir$decompress_path"/"$mk_data
    
}

# 初始化数据库
function init_db(){
     printf "init db---------------------- \n"
     file_path=${mariadb_name%.tar.gz*}
     init_str=$mariadb_base_dir$file_path"/scripts/mysql_install_db --basedir="$mariadb_base_dir$file_path" --datadir="$mariadb_base_dir$file_path"/data --user=root"
     printf "init data path:$init_str---------------------- \n"
     $init_str
     pwd
     chmod -R 777 $mariadb_base_dir$decompress_path"/"$mk_data

}

# 将启动和停止的数据库的脚本复制到对应的解压后安装包的bin目录下
function cp_start_stop_shell(){
    printf "Copy the scripts of the start and stop databases to the bin directory of the corresponding unzipped installation package  \n"
    decompress_path=${mariadb_name%.tar.gz*}
    cp $mariadb_base_dir"mariadbService.sh" $mariadb_base_dir$decompress_path"/bin"
    chmod 777 $mariadb_base_dir$decompress_path"/bin/mariadbService.sh"
 }

function main(){
   pre_check
   user_check
   decompress_and_create_dir
   init_db
   cp_start_stop_shell
  
}

main
printf "mariadb install successfully \n"

当前脚本是构建实列的脚本,会自动规定目录下的mariadb-10.6.8-linux-systemd-x86_64.tar.gz,然后新建对应的conf,data,socket等目录,然后构建一个mariadb的实列模板。

mariadbService.sh

#!/bin/bash
mysql_port=3306
mysql_username="root"
mysql_password=""
base_dir="/cloudsure/mariadb/mariadb-10.6.8-linux-systemd-x86_64"
function_start_mysql(){
    printf "Starting MySQL...\n"
    $base_dir/bin/mysqld_safe --defaults-file=$base_dir/conf/my.cnf 2>&1 > /dev/null &
 }
function_stop_mysql(){
   printf "Stoping MySQL...\n"
   $base_dir/bin/mysqladmin -u ${mysql_username} -p${mysql_password} -S $base_dir/data/socket/mysql${mysql_port}.sock shutdown
}
function_restart_mysql(){
  printf "Restarting MySQL...\n"
  function_stop_mysql
  function_start_mysql
}
function_kill_mysql(){
  kill -9 $(ps -ef | grep 'bin/mysqld_safe' | grep ${mysql_port} | awk '{printf $2}')
  kill -9 $(ps -ef | grep 'libexec/mysqld' | grep ${mysql_port} | awk '{printf $2}')
}
case $1 in
    start)
    function_start_mysql;;
    stop)
    function_stop_mysql;;
    kill)
    function_kill_mysql;;
    restart)
    function_stop_mysql
    function_start_mysql;;
    *)
echo "Usage: /data/dbdata_${mysql_port}/mysqld {start|stop|restart|kill}";;
esac

用于启动和停止mariadb的脚本,放在当前的预定目录下,会在mariadbInit.sh执行时将其放置到加压后的mariadb-10.6.8-linux-systemd-x86_64/bin目录下。

mariadb-10.6.8-linux-systemd-x86_64.tar.gz 来自官网的mariadb的二进制文件
最终效果如下:

[root@localhost mariadb]# pwd
/cloudsure/mariadb
[root@localhost mariadb]# ll
total 673648
-rw-r--r--  1 root    root    344360211 Jun  7 15:14 mariadb-10.6.8-linux-systemd-x86_64.tar.gz
-rwxrwxrwx  1 root    root         3163 Jun  8 16:22 mariadbInit.sh
-rwxrwxrwx  1 root    root         1039 Jun  8 16:31 mariadbService.sh
-rw-r--r--  1 root    root         1631 Jun  8 15:53 my.cnf

执行脚本mariadbInit.sh

执行mariadbInit.sh脚本会生成一个是实列文件mariadb-10.6.8-linux-systemd-x86_64 效果如下

root@localhost mariadb]# pwd
/cloudsure/mariadb
[root@localhost mariadb]# ll
total 673648
drwxrwxr-x 13 lihuatu lihuatu       269 Jun  9 10:06 mariadb-10.6.8-linux-systemd-x86_64 # 产生的生的实列文件
-rw-r--r--  1 root    root    344360211 Jun  7 15:14 mariadb-10.6.8-linux-systemd-x86_64.tar.gz
-rwxrwxrwx  1 root    root         3163 Jun  8 16:22 mariadbInit.sh
-rwxrwxrwx  1 root    root         1039 Jun  8 16:31 mariadbService.sh
-rw-r--r--  1 root    root         1631 Jun  8 15:53 my.cnf

启动mariadbService.sh

  1. 启动mariadbService.sh
[root@localhost mariadb]# ./mariadb-10.6.8-linux-systemd-x86_64/bin/mariadbService.sh start
  1. 授权连接
[root@localhost mariadb]# ./mariadb-10.6.8-linux-systemd-x86_64/bin/mysql -u root -S ./mariadb-10.6.8-linux-systemd-x86_64/data/socket/mysql3306.sock 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.6.8-MariaDB-log MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
Query OK, 0 rows affected (0.021 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]>
  1. 关闭防火墙,navicat测试连接。

结果输出

将mariadb-10.6.8-linux-systemd-x86_64压缩成tar.gz包(mysqlSever.tar.gz),后面任何节点需要安装mariadb只需要解压mysqlSever.tar.gz包,然后启动里面的 mariadbService.sh start就可以开启一个实列

  1. 授权
[root@localhost mariadb]# chmod -R 777 ./mariadb-10.6.8-linux-systemd-x86_64/data/*
  1. 打包
[root@localhost mariadb]# tar czvfp mysqlSever.tar.gz mariadb-10.6.8-linux-systemd-x86_64
  1. 结果
drwxrwxr-x 13 lihuatu lihuatu       269 Jun  9 10:06 mariadb-10.6.8-linux-systemd-x86_64
-rw-r--r--  1 root    root    344360211 Jun  7 15:14 mariadb-10.6.8-linux-systemd-x86_64.tar.gz
-rwxrwxrwx  1 root    root         3163 Jun  8 16:22 mariadbInit.sh
-rwxrwxrwx  1 root    root         1039 Jun  8 16:31 mariadbService.sh
-rw-r--r--  1 root    root         1631 Jun  8 15:53 my.cnf
-rw-r--r--  1 root    root    345438650 Jun  9 10:32 mysqlSever.tar.gz # 输出包
[root@localhost mariadb]# 

测试

我们会在17.180上测试输出包mysqlSever.tar.gz

  1. 发送输出包的17.180的节点
[root@localhost mariadb]# scp mysqlSever.tar.gz root@192.168.17.180:/cloudsure/mariadb

17.180的节点也要提前准备一个一样的目录/cloudsure/mariadb,这是约定 接下来操作 17.180节点
2. 解压mysqlSever.tar.gz

[root@localhost mariadb]# tar zxvf mysqlSever.tar.gz 
[root@localhost mariadb]# ll
总用量 337344
drwxrwxr-x. 13 mysql mysql       269 69 10:06 mariadb-10.6.8-linux-systemd-x86_64
-rw-r--r--.  1 root  root  345438650 69 10:33 mysqlSever.tar.gz
  1. 创建mysql用户组 和 mysql用户
[root@localhost mdb]# groupadd mysql
[root@localhost mdb]# adduser -g mysql mysql

mariadb启动默认时需要mysql 用户
4. 启动数据库

[root@localhost mariadb]# /cloudsure/mariadb/mariadb-10.6.8-linux-systemd-x86_64/bin/mariadbService.sh start
  1. 关闭防火墙,navicat测试连接即可

配置参考

完整的配置文件

[mysqld]                                                              #服务端配置
port        = 3306                                                    #监听端口
socket      = /tmp/mysql.sock                                         #通信设置
user    = mariadb                                                     #使用mariadb用户启动
basedir = /usr/local/mariadb                                          #安装路径
datadir = /data/mysql                                                 #数据目录
log_error = /data/mysql/mariadb.err                                #错误日志
pid-file = /data/mysql/mariadb.pid                                 #pid进程文件
skip-external-locking                                                 #避免mysql的外部锁定,减少出错几率提高稳定性
key_buffer_size = 64M                                                 #缓存存储引擎参数,这个参数可以设置为64M
max_allowed_packet = 1M                                               #允许最大接收数据包的大小,防止服务器发送过大的数据包,可以设置为16MB或者更大,但设置太大也可能有危险
table_open_cache = 256                                                #mysql每打开一个表,都会读入一些数据到table_open_cache缓存中,当MYSQL在这个缓存中找不到相应的信息时,才会去磁盘读取,默认值64,假设系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);当设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上
sort_buffer_size = 1M                                                 #在表进行order by和group by 排序操作时,由于排序的字段没有索引,会出现Using filesort,为了提高性能,可用此参数增加每个线程分配的缓存区大小,默认时256k,这个参数不要设置过大,一般128~256k,另外一般出现using filesort的时候,要通过增加索引来解决
net_buffer_length = 8K                                                #包消息缓冲区初始化net_buffer_length字节,但需要时可以增长到max_allowed_packet字节
read_buffer_size = 1M                                                 #该参数用于表的顺序扫描,表示每个线程分配的缓冲区大小,比如在进行全表扫描时,mysql会按照数据的存储顺序一次读取数据块,每次读取的数据块首先会暂存在read_buffer_size中,当buffer空间被写满或者全部数据读取结束后,在将buffer中的数据返回给上层调用者,以提高效率默认128k,也不要设置过大
read_rnd_buffer_size = 512K                                           #该参数用于表的随机读取,表示每个线程分配的缓冲区大小,比如,按照一个非索引字段做order by排序操作时,就会利用这个缓冲区来暂存读取的数据,默认时256k,也不要设置过大
myisam_sort_buffer_size = 16M                                         #当myisam表执行repair table或创建索引时,用以缓冲排序索引,设置太小可能会遇到"myisam_sort_buffer_size is to small"
thread_cache_size = 32                                                #线程池,线程缓冲。用来缓冲空闲的线程,以至于不被销毁,如果线程缓冲在的空闲线程,需要重新建立新连接,则会优先调用线程池中的缓冲,很快就能相应连接请求,每建立一个连接,都需要一个线程与之匹配。
query_cache_size = 32M                                                #缓存select语句和结果集大小的参数。查询缓存会存储一个select查询的文本与被传送到客户端的相应结果。如果之后接收到一个相同的查询,服务器会从查询缓存中检索结果,而不是再次分析和执行这个同样的查询。如果你的环境中写操作很少,读操作频繁,那么打开query_cache_type=1,会对性能有明显提升。如果写操作频繁,则应该关闭它(query_cache_type=0)。
tmp_table_size = 64M                                                  #临时HEAP数据表的最大长度(默认设置是32M); 超过这个长度的临时数据表将被转换为MyISAM数据表并存入一个临时文件。
                                                                      #
explicit_defaults_for_timestamp = true                           #是否显示默认时间戳
#skip-networking                                                      #
max_connections = 500                                                 #该参数用来设置最大连接数,告诉你当前你的服务器允许多少并发连接。默认为100,一般设置为512-1000即可。请记住,太多的连接会导致内存的使用量过高并且会锁住你的 MySQL 服务器。一般小网站需要 100-200 的连接数,而较大可能需要 500-800 甚至更多。这里的值很大程度上取决于你 MySQL/MariaDB 的使用情况。
max_connect_errors = 100                                              #如果有时网络抽风,或者应用配置错误,或者其他原因导致客户端短时间内不断的尝试连接,客户端可能会被列入黑名单,然后将无法连接,直到再次刷新主机缓存。这个选项默认值太小了,可以考虑设的足够大(如果你的服务器配置够强大的话)。
open_files_limit = 65535                                              #mysql打开最大文件数
                                                                      #
log-bin=mysql-bin                                                     #这些路径相对于datadir
binlog_format=mixed                                                   #日志格式
server-id   = 1                                                       #给服务器分配一个独一无二的ID编号; n的取值范围是1~2的32次方启用二进制日志功能。在复制数据同步的时候会用到,Helloweba后面会有文章介绍。
expire_logs_days = 10                                                 #启用二进制日志后,保留日志的天数。服务器会自动清理指定天数前的日志文件,如果不设置则会导致服务器空间耗尽。一般设置为7~14天。
                                                                      #
default_storage_engine = InnoDB                                      #新数据表的默认存储引擎(默认设置是MyISAM)。这项设置还可以通过–default-table-type选项来设置。
innodb_file_per_table = 1                                             #提供了更灵活的方式,它把每个数据库的信息保存在一个 .ibd 数据文件中。每个 .idb 文件代表它自己的表空间。通过这样的方式可以更快地完成类似 “TRUNCATE” 的数据库操作,当删除或截断一个数据库表时,你也可以回收未使用的空间。这样配置的另一个好处是你可以将某些数据库表放在一个单独的存储设备。这可以大大提升你磁盘的 I/O 负载。
innodb_data_home_dir = /data/mysql                                 #InnoDB主目录,所有与InnoDB数据表有关的目录或文件路径都相对于这个路径。在默认的情况下,这个主目录就是MySQL的数据目录。
innodb_data_file_path = ibdata1:10M:autoextend               #用来容纳InnoDB为数据表的表空间: 可能涉及一个以上的文件; 每一个表空间文件的最大长度都必须以字节(B)、兆字节(MB)或千兆字节(GB)为单位给出; 表空间文件的名字必须以分号隔开; 最后一个表空间文件还可以带一个autoextend属性和一个最大长度(max:n)。
innodb_log_group_home_dir = /data/mysql                          #用来存放InnoDB日志文件的目录路径(如ib_logfile0、ib_logfile1等)。在默认的情况下,InnoDB驱动程序将使用 MySQL数据目录作为自己保存日志文件的位置。
innodb_buffer_pool_size = 256M                                       #这个参数是InnoDB存储引擎的核心参数,默认为128KB,这个参数要设置为物理内存的60%~70%。
innodb_log_file_size = 64M                                            #事务日志文件写操作缓存区的最大长度(默认设置是1MB)。
innodb_log_buffer_size = 8M                                           #事务日志所使用的缓存区。InnoDB在写事务日志的时候,为了提高性能,先将信息写入Innodb Log Buffer中,当满足innodb_flush_log_trx_commit参数所设置的相应条件(或者日志缓冲区写满)时,再将日志写到文件(或者同步到磁盘)中。可以通过innodb_log_buffer_size参数设置其可以使用的最大内存空间。默认是8MB,一般为16~64MB即可。
innodb_flush_log_at_trx_commit = 1                                 #这个选项决定着什么时候把日志信息写入日志文件以及什么时候把这些文件物理地写(术语称为”同步”)到硬盘上。设置值0的意思是每隔一秒写一次日 志并进行 同步,这可以减少硬盘写操作次数,但可能造成数据丢失; 设置值1(设置设置)的意思是在每执行完一条COMMIT命令就写一次日志并进行同步,这可以防止数据丢失,但硬盘写操作可能会很频繁; 设置值2是一般折衷的办法,即每执行完一条COMMIT命令写一次日志,每隔一秒进行一次同步。
innodb_lock_wait_timeout = 50                                         #如果某个事务在等待n秒(s)后还没有获得所需要的资源,就使用ROLLBACK命令放弃这个事务。这项设置对于发现和处理未能被InnoDB数据表驱动 程序识别出来的死锁条件有着重要的意义。这个选项的默认设置是50s。
                                                                      #
[mysqldump]                                                           #
quick                                                                 #
max_allowed_packet = 16M                                              #            
                                                                      #
[mysql]                                                               #
no-auto-rehash                                                        #
                                                                      #
[myisamchk]                                                           #
key_buffer_size = 64M                                                 #    
sort_buffer_size = 1M                                                 #    
read_buffer = 2M                                                      #
write_buffer = 2M                                                     #
                                                                      #
[mysqlhotcopy]                                                        #
interactive-timeout                                                   #

优化的配置文件参考

port    =3306                                    
socket    =/tmp/mysql.sock                       
                                                                                           
[mysqld]                                                                               
port        = 3306                                                           
socket      = /tmp/mysql.sock                                     
user    = mysql    
server_id  = 10
datadir  = /data/mysql/
old_passwords  = 1
lower_case_table_names  = 1
character-set-server  = utf8
default-storage-engine  = MYISAM
log-bin  = bin.log
log-error  = error.log
pid-file  = mysql.pid
long_query_time  = 2
slow_query_time  = 2
slow_query_log 
slow_query_log_file  = slow.log
binlog_cache_size  = 4MB
binlog_format  = mixed
max_binlog_cache_size  = 16MB
max_binlog_size  = 1GB
expire_logs_days  = 30
ft_min_word_len  = 4
back_log  = 512
max_allowed_packet  = 64MB
max_connections  = 4096
max_connect_errors  = 100
join_buffer_size  = 2MB
read_buffer_size  = 2MB
read_rnd_buffer_size  = 2MB
sort_buffer_size    = 2MB
query_cache_size  = 2MB
table_open_cache  = 10000
thread_cache_size  = 256
max_heap_table_size  = 64MB
tmp_table_size  = 64MB
thread_stack  = 192KB
thread_concurrency  = 24 
local-infile  = 0
skip-show-database
skip-name-resolve
skip-external-locking
connect_timeout  = 600
interactive_timeout  = 600
wait_timeout  = 600
#MyISAM
key_buffer_size  = 512MB
bulk_insert_buffer_size  = 64MB
mysiam_sort_buffer_size  = 64MB
mysiam_max_sort_file_size  = 1GB
mysiam_repair_threads  = 1
concurrent_insert  = 2
myisam_recover
#INNODB
innodb_buffer_pool_size  = 64G
innodb_additional_mem_pool_size  = 32MB
innodb_data_file_path  = ibdata1:1G;ibdata2:1G:autoextend
innodb_read_io_threads  = 8
innodb_write_io_threads   = 8
innodb_file_per_table  = 1
innodb_flush_log_at_thx_commit  = 2
innodb_lock_wait_timeout  = 120
innodb_log_buffer_size  = 8MB
innodb_log_file_size  = 256MB
innodb_log_files_in_group  = 3
innodb_max_dirty_pages_pct  = 90
innodb_thread_concurrency  = 16
innodb_open_files  = 10000
#innodb_force_recovery  = 4
#replication slave
read-only
#skip-salve-start
relay-log  = relay.log
log-slave-updates

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值