一主多从
创建多个实例
3307 3308 3309 3310
mkdir {3307..3310} # 这一步可以省略,初始化的时候,mysql会自动创建--datadir路径
- 以下配置完成后,使用windows客户端去远程连接实例,检验实例是否都已创建成功
/usr/local/mysql/bin/mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/3307 --user=mysql
###########################
vim /usr/local/mysql/3307/my.cnf
[client]
port = 3307
socket = /usr/local/mysql/3307/mysql.sock
default-character-set=utf8
[mysqld]
port = 3307
socket = /usr/local/mysql/3307/mysql.sock
datadir=/usr/local/mysql/3307/
log-error=/usr/local/mysql/3307/error.log
pid-file=/usr/local/mysql/3307/mysql.pid
character-set-server=utf8
lower_case_table_names=1
autocommit=1
#########################
/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/3307/my.cnf &
/usr/local/mysql/bin/mysql -uroot -p -P3307 -h127.0.0.1 # 不需要输入密码,直接回车进入命令行
alter user root@localhost identified by 'root';
grant all privileges on *.* to root@'%' identified by 'root';
quit
/usr/local/mysql/bin/mysql -uroot -p -P3307 -h127.0.0.1 # 之后再登陆就需要输入密码了,这里就需要输入密码了
flush privileges;
停止实例
mysqladmin -uroot -pr -P3307 -h127.0.0.1 shutdown
# 如果已经连接mysql,就直接执行如下命令停止实例
mysql> shutdown;
主从配置
# 将3307作为主,其余实例作为从 ,配置在my.cnf配置文件中
log-bin=mysql-bin # 只在主里面配置
server-id=3307 # 主从都要配置
启动实例
/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/3307/my.cnf &
配置主从关系
在主实例中配置
mysql -uroot -proot -P3307 -h127.0.0.1
show master status;--查看偏移量
grant replication slave on *.* to 'copy'@'%' identified by 'copy';--新增用户用于从节点进行数据同步
show master status;--偏移量发生了改变
reset master; --重置偏移量
在从实例中配置
mysql -uroot -proot -P3308 -h127.0.0.1
stop slave; --停止复制,相当于终止从服务器的IO和SQL线程
reset slave;
change master to master_host='192.168.78.120',master_port=3307,
master_user='copy',master_password='copy',
master_log_file='mysql-bin.000001',
master_log_pos=154;
show slave status \G -- \G是格式化结果的格式
start slave; -- 启动从线程
show slave status \G
----如果出现复制问题,从的sql或IO进程会停止,需要将问题排除后,重启slave即可恢复
stop slave;
start slave;
show slve status \G
全新MySQL集群架构实战课程 解决MySQL工作中的难题_哔哩哔哩_bilibili
双主双从
停止所有实例
mysqladmin -uroot -proot -P3307 -h127.0.0.1 shutdown
将3309也开启二进制文件
echo "bin-log=mysql-bin" >> 3309/my.cnf
在3307上配置
auto_increment_increment=2 # 设置自动增长步长
auto_increment_offset=1 # 设置自动增长起始值,为了避免多个主库之间发生冲突,建议错开设置(1,3,5...和2,4,6...)
log-slave-updates # 从其他库同步过来的数据要记录到二进制文件
sync_binlog=1 # 设置每几次事务提交,将binlog缓存刷进日志文件中,这里提交1次就要同步数据(对性能有影响,但主从一致性高,根据实际情况进行取舍)
MySQL主从复制讲义.docx - 墨天轮文档 (modb.pro)
在3309上配置
auto_increment_increment=2
auto_increment_offset=2
log-slave-updates
sync_binlog=1
启动所有实例
先启动所有主,后启动所有从
/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/3307/my.cnf &
在两台主上创建复制数据的账号
# 3307已经创建过了,这里只需要在3309上创建就行
mysql -uroot -proot -P3309 -h127.0.0.1
grant replication slave on *.* to 'copy'@'%' identified by 'copy';
# 在两台主库上停止复制,并重置服务器到初始状态
show master status;
reset master;
在3309 和 3307上停止并重置slave
之前3307没有做为从库过,可以省略此步
mysql -uroot -proot -P3309 -h127.0.0.1
show slave status \G
stop slave ;
reset slave;
从库配置
此时所有的库都是从库,两台主库同时也是从库
# 3307 和 3310 上执行,它们的主库是 3309
change master to master_host='192.168.78.120',master_port=3309,
master_user='copy',master_password='copy',
master_log_file='mysql-bin.000001',
master_log_pos=154;
# 3309 和 3308 上执行,他们的主库是 3307
change master to master_host='192.168.78.120',master_port=3307,
master_user='copy',master_password='copy',
master_log_file='mysql-bin.000001',
master_log_pos=154;
# 在所有从库上启动IO和SQL线程
start slave;
show slave status \G