mysql主主搭建(版本5.7.32)

这是一个自动化脚本,用于安装并配置MySQL 5.7.32的主从复制。用户需要输入数据挂载目录,然后脚本会创建用户、数据目录,根据用户输入设置主库或从库的配置文件,并初始化数据库。配置包括GTID模式、binlog格式、用户权限、优化参数等。最后,脚本会启动MySQL服务并提供后续操作指南。
摘要由CSDN通过智能技术生成
#!/bin/bash
echo "本地yum源是否配置完毕,是请忽略,否请按CTRL+C退出!"
yum -y install numactl
sleep 3
echo "自动化安装mysql-5.7.32解压版(主/从):"
read -p "请根据实际数据挂载盘输入mysql安装的主目录(建议目录/data):" maindir

if [ -f /root/mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz ];then
echo "创建主目录并解压包:"
mkdir $maindir
cd /root
tar xf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.32-linux-glibc2.12-x86_64 mysql
mv mysql $maindir

echo "创建用户:"
useradd mysql -s /sbin/nologin

echo "创建数据目录:"
mkdir -p $maindir/mysql/data
chown -R mysql:mysql $maindir/mysql

echo "选择主从生成的my.cnf配置:"
read -p "请确定是主库或是从库,主输入:1,从输入2:" type
if [ $type -eq 1 ];then
cat > /etc/my.cnf << EOF
[client]
port= 3306
socket=$maindir/mysql/data/mysql.sock

[mysqld]
#master一般设置为1
server-id=1
sync_binlog = 1
auto-increment-increment = 2
auto-increment-offset = 1
binlog_checksum = none
slave-skip-errors = all
slave-skip-errors=ddl_exist_errors
#开启binlog
log-bin=mysql-bin
#binlog格式:混合。如不设置,默认为SBR模式,在导入含innodb表的数据库时会出错
binlog_format=row #(此处要启用行模式)
binlog-row-image=full #5.6以后才开始支持(此处要用full,不要用minimal)
#设置自动清理binlog日志,可能根据网站访问量和硬盘可用空间来定义这个值,15天清理一次
expire_logs_days=15
#开启gtid
gtid_mode=on
#开启从库写入binlog
log-slave-updates=on
#强制gtid一致性,开启后对于特定create table不被支持
enforce-gtid-consistency=true

port=3306
datadir=$maindir/mysql/data
basedir=$maindir/mysql
socket=$maindir/mysql/data/mysql.sock
user=mysql

#指定日志和pid位置#
log-error=$maindir/mysql/data/mysql-error.log
pid-file=$maindir/mysql/data/mysqld.pid

#MySQL全文索引查询关键词最小长度限制调为1
ft_min_word_len=1

#开启timestamp自动更新#
explicit_defaults_for_timestamp=true

#关闭符号链接支持#
symbolic-links=0

#不区分大小写#
lower_case_table_names=1

#禁用DNS解析#
skip-name-resolve

#INNODB重点优化参数:缓存用户表及索引数据,一般设置为系统内存的50%,但是得根据实际预留#
innodb_buffer_pool_size=4G

#MyISAM重点优化参数:指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度#
key_buffer_size=32M

#分配简单索引扫描,范围索引扫描,无索引全表扫描的表连接 缓存的大小#
join-buffer-size=2M

#在每个connection(session)第一次需要使用这个buffer的时候,一次性分配设置的内存#
sort-buffer-size=4M

#读查询操作所能使用的缓冲区大小,该参数对应的分配内存也是每连接独享#
read_buffer_size=4M

#针对按某种特定顺序(如ORDER BY子句)输出的查询结果(默认256K)加速排序操作后的读数据,提高读分类行的速度#
read_rnd_buffer_size=16M

#MyISAM表发生变化时重新排序所需的缓冲#
myisam_sort_buffer_size=128M

#关闭query-cache#
query-cache-size=0
query_cache_type=0

#临时HEAP数据表的最大长度#
tmp_table_size=256M

#重新利用保存在缓存中线程的数量#
thread_cache_size=64

#开启慢日志查询#
log-slow-admin-statements
slow-query-log=on
slow-launch-time=2
slow-query-log-file=$maindir/mysql/data/mysql-slow.log

#表描述符缓存大小,可减少文件打开/关闭次数#
table-open-cache=1024

#设置最大连接(用户)数#
max-connections=3000

#如果某一客户端尝试连接此MySQL服务器,但是失败(如密码错误等等)5000次,则MySQL会无条件强制阻止此客户端连接#
max_connect_errors=5000

#不写入硬盘而是写入系统缓存#
#日志仍然会每秒flush到硬盘,所以你一般不会丢失超过1-2秒的更新,只会在整个操作系统挂了时才可能丢数据#
innodb_flush_log_at_trx_commit=2

#限制server接受的数据包大小#
max_allowed_packet=300M

#设置编码格式#
collation-server=utf8mb4_general_ci
init-connect='SET NAMES utf8mb4'
character-set-server=utf8mb4

#忽略客户端字符集#
skip-character-set-client-handshake

#开启了log-bin创建function需要开启
log_bin_trust_function_creators=1
sql-mode="NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
group_concat_max_len=2000

#捕捉死锁到error日志
innodb_print_all_deadlocks=1
EOF

elif [ $type -eq 2 ];then
cat > /etc/my.cnf <<EOF
[client]
port= 3306
socket=$maindir/mysql/data/mysql.sock

[mysqld]
#slave一般设置为2
server-id=2
sync_binlog = 1
binlog_checksum = none

auto-increment-increment = 2
auto-increment-offset = 2
slave-skip-errors = all
#开启binlog
log-bin=mysql-bin
#binlog格式:混合。如不设置,默认为SBR模式,在导入含innodb表的数据库时会出错
binlog_format=row #(此处要启用行模式)
binlog-row-image=full #5.6以后才开始支持(此处要用full,不要用minimal)
#设置自动清理binlog日志,可能根据网站访问量和硬盘可用空间来定义这个值,15天清理一次
expire_logs_days=15
#开启中继日志完整性
relay_log_recovery=1
#需要忽略复制的数据库
replicate-ignore-db=mysql
#其他参数
slave-skip-errors=1062,1032
slave-skip-errors=ddl_exist_errors
read_only=on
skip-slave-start
#强制gtid一致性,开启后对于特定create table不被支持
enforce-gtid-consistency=on
#开启gtid
gtid_mode=on
#开启从库写入binlog
log-slave-updates=on

port=3306
datadir=$maindir/mysql/data
basedir=$maindir/mysql
socket=$maindir/mysql/data/mysql.sock
user=mysql

#指定日志和pid位置#
log-error=$maindir/mysql/data/mysql-error.log
pid-file=$maindir/mysql/data/mysqld.pid

#MySQL全文索引查询关键词最小长度限制调为1
ft_min_word_len=1

#开启timestamp自动更新#
explicit_defaults_for_timestamp=true

#关闭符号链接支持#
symbolic-links=0

#不区分大小写#
lower_case_table_names=1

#禁用DNS解析#
skip-name-resolve

#INNODB重点优化参数:缓存用户表及索引数据,一般设置为系统内存的50%,但是得根据实际预留#
innodb_buffer_pool_size=4G

#MyISAM重点优化参数:指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度#
key_buffer_size=32M

#分配简单索引扫描,范围索引扫描,无索引全表扫描的表连接 缓存的大小#
join-buffer-size=2M

#在每个connection(session)第一次需要使用这个buffer的时候,一次性分配设置的内存#
sort-buffer-size=4M

#读查询操作所能使用的缓冲区大小,该参数对应的分配内存也是每连接独享#
read_buffer_size=4M

#针对按某种特定顺序(如ORDER BY子句)输出的查询结果(默认256K)加速排序操作后的读数据,提高读分类行的速度#
read_rnd_buffer_size=16M

#MyISAM表发生变化时重新排序所需的缓冲#
myisam_sort_buffer_size=128M

#关闭query-cache#
query-cache-size=0
query_cache_type=0

#临时HEAP数据表的最大长度#
tmp_table_size=256M

#重新利用保存在缓存中线程的数量#
thread_cache_size=64

#开启慢日志查询#
log-slow-admin-statements
slow-query-log=on
slow-launch-time=2
slow-query-log-file=$maindir/mysql/data/mysql-slow.log

#表描述符缓存大小,可减少文件打开/关闭次数#
table-open-cache=1024

#设置最大连接(用户)数#
max-connections=3000

#如果某一客户端尝试连接此MySQL服务器,但是失败(如密码错误等等)5000次,则MySQL会无条件强制阻止此客户端连接#
max_connect_errors=5000

#不写入硬盘而是写入系统缓存#
#日志仍然会每秒flush到硬盘,所以你一般不会丢失超过1-2秒的更新,只会在整个操作系统挂了时才可能丢数据#
innodb_flush_log_at_trx_commit=2

#限制server接受的数据包大小#
max_allowed_packet=300M

#设置编码格式#
collation-server=utf8mb4_general_ci
init-connect='SET NAMES utf8mb4'
character-set-server=utf8mb4

#忽略客户端字符集#
skip-character-set-client-handshake

#开启了log-bin创建function需要开启
log_bin_trust_function_creators=1
sql-mode="NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
group_concat_max_len=2000

#捕捉死锁到error日志
innodb_print_all_deadlocks=1
EOF

else
echo "输入错误,请重新输入!"
exit
fi

free -m
read -p "请输入innodb_buffer_pool_size的大小(如果mysql独占机器,请把值设置为至少系统内存一半,输入格式为'*G',譬如2G):" size
sed -i "s/4G/$size/g" /etc/my.cnf

echo "初始化数据库:"
$maindir/mysql/bin/mysqld --initialize-insecure --user=mysql
#如果报错,执行"rm  -rf  $maindir/mysql/data/*"再重新执行初始化操作
cp $maindir/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 700 /etc/init.d/mysqld
sed -i '46,47d' /etc/init.d/mysqld
sed -i '45a\basedir='$maindir'/mysql' /etc/init.d/mysqld
sed -i '46a\datadir='$maindir'/mysql/data' /etc/init.d/mysqld

echo "启动服务:"
/etc/init.d/mysqld start
echo "停止服务:/etc/init.d/mysqld stop"
echo "查看服务状态:"
/etc/init.d/mysqld status
ps -ef|grep mysql

echo "export PATH=${PATH}:$maindir/mysql/bin" >> /etc/profile
source /etc/profile

echo "切记登入命令行执行:DROP user mysql.sys@localhost删除系统无用用户!"
echo "如果直接运行mysql提示command not found请重新打开会话窗口!"
echo "请记得修改mysql的root密码并进行授权!"

echo "主库后续操作参考:"
echo "GRANT replication slave ON *.* TO 'repl'@'从库ip' IDENTIFIED BY 'repl' WITH GRANT OPTION;"
echo "quit"
echo "show master status;"
echo "/etc/init.d/mysqld restart"

echo "从库后续操作参考:"
echo "stop slave;"
echo "CHANGE MASTER TO MASTER_HOST='主库IP',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.######',MASTER_LOG_POS=###;"
echo "start slave;"
echo "quit"
echo "/etc/init.d/mysqld restart"
#主主结构互为主从,刚才的主从配置对调操作一遍。
else
echo "请把相应的包上传到/root目录,再进行下一步!"
exit 0
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值