背景:
需要搭建Mycat商用环境,使用4台虚拟机操练一下,最终的目标是:
服务器情况:
|
机器IP |
机器名 |
安装组件 |
|
192.168.239.144 |
douzi9 |
Master1 mycat1 |
|
192.168.239.145 |
douzi10 |
Slave1 |
|
192.168.239.146 |
douzi11 |
Master2 mycat2 |
|
192.168.239.147 |
douzi12 |
Slave2 |
四台服务器安装mysql参考:
https://blog.csdn.net/qq_16116549/article/details/104106070
关闭所有服务器防火墙:
systemctl stop firewalld
本文章只是一主一从,只需要 douzi9、douzi10两台虚拟机
正文:
1.douzi9 主服务器mysql配置
修改vi /etc/my.cnf
|
[mysqld] ## 启用二进制日志 log-bin=mysql-bin ## 主服务器唯一id server-id=1 ## 设置不要复制的数据库(可配多个) binlog-ignore-db=mysql ## 设置需要复制的数据库 binlog-do-db=testdb ## 设置logbin格式 (STATEMENT、ROW、MIXED) binlog_format=STATEMENT
# douzi add config end |
2.douzi10 从服务器mysql配置
修改vi /etc/my.cnf
|
[mysqld] # douzi add config start ## 主服务器唯一id server-id=2 ## 启动中继日志 relay-log=mysql-relay # douzi add config end |
3.重启mysql服务器
|
systemctl restart mysqld |
4.查看mysql服务器状态是否正常
|
systemctl status mysqld |
5.主机上建立账户并授权从机:
访问主机mysql服务器:mysql -uroot -p123456
执行授权sql:grant replication slave on *.* to 'slave'@'%' identified by '123456';
注:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
执行 set global validate_password_policy=0;
set global validate_password_length=1; 即可
6.查看主mysql服务器状态并记录下来: show master status;
7.从机命令:
|
change master to master_host='192.168.239.144', master_port=3306,master_user='slave', master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=438; |
注:如果以前存在过主从复制,重置从机复制命令:
1>. stop slave; 从机执行
2>.reset master; 主机执行
8.启动从机复制服务:start slave; 查看从机状态(列展现):show slave status\G;
查看Slave_IO_Running: No 和 Slave_SQL_Running: Yes 必须都是 yes才行;
针对error错误信息:The slave I/O thread stops because master and slave have equal MySQL server UUIDs;说明 主从服务器 mysql有相同的 uuid;(根本原因:这4台服务器是克隆的同一服务器,上边有相同的mysql)
解决办法:
停止从库的mysqld服务,删除他的/var/lib/mysql/auto.cnf文件,再启动数据库服务即可
vi /var/lib/mysql/auto.cnf
systemctl stop mysqld
rm -f /var/lib/mysql/auto.cnf
systemctl start mysqld
|
再次查看show slave status\G;
9.验证主从复制是否成功:
主库执行: Create database testdb; 查看从库是否有testdb;
CREATE TABLE `mytbl` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;