mysql主从集群搭建

小龙 479 2022-04-13
博客地址
https://blog.csdn.net/richie696/article/details/114261284

1、解压msyql
tar xzvf 
2、创建mysql数据目录
mkdir -p /usr/data/mysql/master/{data,file,logs}

3、创建mysql配置文件
vim /usr/data/mysql/master/file/my.cnf

[mysqld]
port=3306                                   # 端口 
basedir=/usr/local/mysql                    # 二进制文件目录
datadir=/usr/data/mysql/master/data                    # 初始化数据目录

log_bin=/usr/data/mysql/master/logs/mysql-bin          # binlog日志(必须设置id才可使用)
log_error=/usr/data/mysql/master/logs/mysql-error.log  # 错误日志

pid_file=/usr/data/mysql/master/file/mysql.pid         # pid文件(作用不明,不写会导致出错)
socket=/usr/data/mysql/master/file/mysql-3306.sock     # socket文件

# 向错误日志写入空行(别问为什么,问就是不写会导致报错) 
# [   >>   重定向意思,> 也行,反正错误日志没东西    ] 
echo "" >> /usr/data/mysql/master/logs/mysql-error.log

4、 初始化数据库
 /usr/local/mysql/bin/mysqld --initialize --basedir=/usr/local/mysql/ --datadir=/usr/data/mysql/master/data/
// 初始化密码
2022-04-13T02:27:18.776836Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: o;d/b><Vr2_N

5、创建mysql用户
useradd mysql

6、给与文件夹权限
chown -R mysql.mysql /usr/data/mysql              # 修改数据目录权限
chown -R mysql.mysql /usr/local/mysql              # 修改mysql文件目录权限

7、切换myusql用户,启动数据库
su mysql
/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/data/mysql/master/file/my.cnf &

# 等待几秒钟回车即可,回车后不提示任何内容即为成功(回车后提示成功也是启动失败)

8、链接数据库
/usr/local/mysql/bin/mysql -uroot -p -S /mysql/master/file/mysql-3306.sock

9、更改密码
alter user 'root'@'localhost' identified by 'hellosxl';

10、刷新权限
flush privileges;

11、创建用户并授权,可以远程链接
create user rsthe@'%' identified by 'rsthe';

11.1、查询所有用户信息
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

11.2、授予所有权限
grant all privileges on *.* to rsthe@'%';

11.3、修改root远程连接
use mysql;
update user set host = '%'  where user ='root';
flush privileges;

12、将数据库复制两份做从库

13、修改主库 my.cnf 文件
vim usr/data/mysql/master/file/my.cnf

# 设置server-id,唯一值,标识主机,必须与从库不一致
server-id=1
# 开启二进制日志,主库必须开启
log-bin=mysql-bin
# 自动删除2592000秒(30天)前的日志
# 8.0以前的版本中这个配置为expire_logs_days,单位为天
binlog_expire_logs_seconds=2592000
# binlog记录的模式
# statement模式不会记录每一条更改语句,节约资源但主从数据可能不一致
# row模式记录每一条更改的语句,日志量非常大
# mixed模式是前两者优点的综合,但日志结构较为复杂
binlog_format=mixed
#设置只记录binlog的库,如果全库,注释该配置
# binlog-do-db=demo
# 不同步哪些数据库 
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys



14、修改从库配置
# 设置server-id,唯一值,标识主机,必须与主库不一致
server-id=2

15、启动主从mysql服务

主库查询binLog日志信息
show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |     1048 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

16、从库中配置需要连接的主库信息:登录MySQL客户端配置
命令:
change master to master_host='192.168.181.129', master_port=3306, master_user='rsthe', master_password='rsthe', master_log_file='mysql-bin.000004', master_log_pos=1048;

命令解释:
master_host='主服务器IP地址'
master_port=主服务器端口
master_user='用户名'
master_password='密码'
master_log_file='主库binlog日志文件名称'
master_log_pos=开始复制的索引



16、从库启动/关闭slave
start slave;
stop slave;

17、查看slave状态
show slave status \G;

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

上面两个选项都是yes表示启动成功


18、开启半同步复制
主库配置
需要给MySQL数据库安装semi插件。
install plugin rpl_semi_sync_master soname 'semisync_master.so';
show variables like '%semi%';
set global rpl_semi_sync_master_enabled = 1;
set global rpl_semi_sync_master_timeout = 1000;

查看安装结果。上面的第三步是开启semi插件,第四步是设置同步超时时长为1秒。
show variables like '%semi%';

主库配置基本结束。下面开始从库配置。

从库配置
给从库安装semi插件并启用。注意,主库和从库的插件不一样
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
set global rpl_semi_sync_slave_enabled = 1;

查看安装结果。
show variables like '%semi%';

将其他Slave节点按照同样方式进行配置即可。
配置完以后重启一下slave节点
start slave;
stop slave;