mysql8.0安装,半同步复制生产配置教学

729 阅读6分钟

准备两台以上机器;

1. 安装mysql

下载mysql
方法一:本地上传

image.png

方法二:linux下载

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz

cd /usr/local/
# 下载
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz
# 解压
tar xvJf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz
# 改名
mv mysql-8.0.30-linux-glibc2.12-x86_64 mysql
cd mysql/
# 新建文件,如存在忽略
mkdir data
mkdir log
# 新建pid文件
touch mysql.pid
# 新增mysql用户组和用户
groupadd mysql
useradd -g mysql mysql
# 权限设置
chown -R mysql.mysql /usr/local/mysql
# 新建配置文件(配置参考拉到最后)
vim /etc/my.cnf

cd mysql/bin/
# 初始化
./mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
在错误日志文件找出你的临时密码

vim /usr/local/mysql/log/mysql.err image.png

# 复制引用
cp -a ../support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql

# 创建软链接
ln -s /usr/local/mysql/bin/mysql /usr/bin/
service mysql start
mysql -uroot -p
(安装成功)

从库机器重复安装步骤(略)

2 半同步复制配置

2.1 主库和从库 半同步复制配置

# 启动mysql
service mysql start
# 登录
mysql -uroot -p
# 主库安装插件 (预防主从切换建议两个都安装)
mysql>install plugin rpl_semi_sync_master soname 'semisync_master.so';
# 从库安装插件
mysql>install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
# 如若需要删除
mysql>uninstall plugin rpl_semi_sync_master;

查看插件是否成功安装

mysql>show status like '%semi%';
mysql>show global variables like 'rpl_semi%';

image.png

image.png

如果Rpl_semi_sync_master_status值为OFF, rpl_semi_sync_master_enabled为ON,并且从库能同步数据成功,说明仍然是异步复制,可能是my.cnf配置文件修改未重启mysql导致的;只需要重启mysql可以得到解决。

安装完插件后可以把/etc/my.cnf注释的同步配置放开(主库,从库)

2.2 主库 半同步复制配置

# 重启mysql 使配置生效
service mysql restart
# 新建账户用于主从同步 不建议用root同步;
-- CREATE USER 'slave'@'%' IDENTIFIED BY '密码'; --mysql8.0默认采用caching_sha2_password 身份验证机制会导致连接失败,别用
# mysql8.0需要采用以下语句创建
mysql>CREATE USER 'slave'@'%' IDENTIFIED WITH 'mysql_native_password' BY '密码';
# 赋值权限
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
# 使账户生效
mysql>flush privileges;
# 查看binlog状态 
mysql>show master status\G;
mysql>show master status;
# 监控同步状态
mysql>show global status like 'rpl%';

image.png 记录下:File, Position并不要向数据库做任何写操作,从库数据同步需要

2.3 从库半同步复制配置

# 暂停同步数据 预防出错
mysql>stop slave;

# master_connect_retry 表示重连的时间间隔
# 若主从在同一内网,使用内网ip
mysql>change master to master_host='192.168.*.*', master_user='slave', master_password='slave的密码', master_port=3306, master_log_file='mysql-bin.000004', master_log_pos=1016, master_connect_retry=30;

把my.cnf注释放开

# 重启mysql
service mysql restart
# 登录
mysql -uroot -p 
# 启动同步
mysql>start slave;
# 查看状态
mysql>SHOW SLAVE STATUS \G

Slave_IO_Running,Slave_SQL_Running 均为yes 代表同步成功

image.png

注意因半同步复制需要依赖插件rpl_semi实现,未安装插件前 不要打开注释启动mysql;

3./etc/my.cnf 配置参考

3.1my.cnf 主库配置

#基础配置#
[client]
port=3306
socket=/usr/local/mysql/mysql.sock
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock 	#路径需要有mysql用户权限 建议直接在mysql目录
character-set-server=UTF8MB4
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #mysql8.0适配5.7语法

#优化配置#
max_connections=100             	# 最大连接数 实际连接数是最大连接数的85%比较合适 一般网站调整到 1000 左右
innodb_thread_concurrency=8             # 默认值为0表示不限制,一般是CPU核数相同或核数的2倍 建议 8
innodb_buffer_pool_size=2048M   	# 物理内存的70%~80% 默认128M
max_allowed_packet=128M         	#SQL数据包发送的大小最大值是1GB,必须设置1024的倍数

#主从配置#
server-id=154                   		#id唯一,一般采用机器ip后缀
#replicate-wild-ignore-table=mysql.*     	# 忽略表
#replicate-wild-ignore-table=sys.*       	# 忽略表
#半同步复制#
#rpl_semi_sync_master_enabled=1  	#表示在master上已经开启了半同步复制模式(主库)
#rpl_semi_sync_master_timeout=5000       #表示如果主库在某次事务中的等待时间超过5000毫秒,则降级为异步复制模式,不在等待slave从库。如果主库再次探测到slave从恢复了,则会自动切换回半同步复制模式

#主库必须,从库不必须#
#log-bin=mysql-bin                       #bin-log日志路径, 路径相对于 datadir 
#binlog_cache_size=2M            	#为每个session 分配的内存,如果事务大而且多,dml操作也频繁(2–4M)
#log_slave_updates=1            	#表示slave将复制事件写进自己的二进制日志
#binlog_format=mixed             	#数据混合复制同步
#expire_logs_days=15                    #超过天数删除binlog日志
#sync_binlog=1                   	#默认0:让filesystem自行决定什么时候来同步,或者cache满了之后再同步
                                	#sync_binlog 1:事物提交会把BINLOG刷新到磁盘,很大的影响MySQL和IO性能,0和设置为1的系统写入性能差距可能高达5倍甚至更多;

#慢查询配置#
slow_query_log=1                        	#开启慢查询
long-query-time=3                       	#慢查询的阀值 单位秒
slow_query_log_file=/usr/local/mysql/log/slow.log

[mysqld_safe]
pid-file=/usr/local/mysqld/mysqld.pid  	#路径需要有mysql用户权限 建议直接在mysql目录
log-error=/usr/local/mysql/log/mysql.err

3.2my.cnf 从库配置

#基础配置#
[client]
port=3306
socket=/usr/local/mysql/mysql.sock
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock 	# 路径需要有mysql用户权限 建议直接在mysql目录
character-set-server=UTF8MB4
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #mysql8.0适配5.7语法
super_read_only=1                       # 从库只读(包括拥有超级权限)

#优化配置#
max_connections=100             	# 最大连接数 实际连接数是最大连接数的85%比较合适 一般网站调整到 1000 左右
innodb_thread_concurrency=8             # 默认值为0表示不限制,一般是CPU核数相同或核数的2倍 建议 8
innodb_buffer_pool_size=2048M   	# 物理内存的70%~80% 默认128M
max_allowed_packet=128M         	#SQL数据包发送的大小最大值是1GB,必须设置1024的倍数

#主从配置#
server-id=154                                   #id唯一,一般采用机器ip后缀
#replicate-wild-ignore-table=mysql.*             # 忽略表
#replicate-wild-ignore-table=sys.*               # 忽略表
#半同步复制#
#rpl-semi-sync-slave-enabled=1   #表示slave开启半同步复制模式(从库)

#慢查询配置#
slow_query_log=1                                #开启慢查询
long-query-time=3                               #慢查询的阀值 单位秒
slow_query_log_file=/usr/local/mysql/log/slow.log

[mysqld_safe]
pid-file=/usr/local/mysql/mysqld.pid     #路径需要在mysql目录 否则启动异常
log-error=/usr/local/mysql/log/mysql.err

如有疑问或错误请指出,谢谢

看到这里点个赞吧

8dda273204f9a072e37adcb97561b18.jpg