192.168.221.133 master
192.168.221.153 node01
192.168.221.136 node02
mkdir /data && cd /data
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58.tar.gz
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gz
cd /root/.ssh/
ssh-keygen -t dsa -P '' -f id_dsa
cat id_dsa.pub >> authorized_keys
scp 192.168.221.153:/root/.ssh/authorized_keys ./authorized_keys.3
scp 192.168.221.136:/root/.ssh/authorized_keys ./authorized_keys.4
cat authorized_keys.3 >> authorized_keys
cat authorized_keys.4 >> authorized_keys
scp authorized_keys 192.168.221.153:/root/.ssh/
scp authorized_keys 192.168.221.136:/root/.ssh/
cat >> /etc/hosts << EOF
192.168.221.133 master
192.168.221.153 node01
192.168.221.136 node02
EOF
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server --nogpgcheck systemctl start mysqld
systemctl enable mysqld
安装失败则查看之前是否安装myssql,如有安装,则卸载
rpm -ql|grep mysql
rpm -e mysql57-community-release-el7-11.noarch
在 /etc/my.cnf 最后一行添加免密登陆
在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程
然后重启服务 systemctl restart mysqld
create user 'gtid'@'192.168.221.%' identified by 'gtid123';
grant replication slave on *.* to 'gtid'@'192.168.221.%';
flush privileges;
create user 'manage'@'192.168.221.%' identified by 'manage123';
grant all privileges on *.* to 'manage'@'192.168.221.%';
flush privileges;
use mysql;
update mysql.user set authentication_string=password('123') where user='root';
flush privileges;
vi /etc/my.cnf[mysqld]skip-grant-tables:wq! #保存退出# mysql -u root -puse mysqlselect * from mysql.user where user='root' \G查看#password_expired 把Y修改为Nupdate user set password_expired='N' where user='root';flush privileges;quit然后把 /etc/my.cnf 的 skip-grant-tables 这行注释掉再次登录服务
#编辑 /etc/my.cnf文件
#skip-grant-tables
server-id=1
log-bin=master-bin
expire_logs_days=3
#编辑 /etc/my.cnf文件
#skip-grant-tables
server-id=2
log-bin=master-bin
expire_logs_days=3
#编辑 /etc/my.cnf文件
#skip-grant-tables
server-id=3
log-bin=master-bin
expire_logs_days=3
systemctl restart mysqld
GTID复制的作用:主要保证主从复制中的高级特性。GTID在MySQL 5.6版本中引入的新特性,但默认并没有开启。GTID在MySQL 5.7版本中即使不开启,也有匿名的GTID记录。GTID的优势:(1)为主库的dump线程传输可以提供并行的解决方案;(2)为从库的SQL线程可以提供并发"回放";(3)配置主从时方便,无需手动定位主库二进制日志文件名称及位置信息,而是交由MySQL自动去定位;温馨提示:MySQL 5.7.17+的版本以后几乎都是GTID模式了。
mysql -uroot -p
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;
mysqldump --single-transaction -uroot -p -A > all.sql
scp all.sql node01:/root/
scp all.sql node02:/root/
mysql -uroot -p < all.sql
mysql -uroot -p
mysql> show master status\G
*************************** 1. row ***************************File: master-bin.000001Position: 154Binlog_Do_DB:Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
CHANGE MASTER TO
MASTER_HOST='192.168.221.133',
MASTER_USER='gtid',
MASTER_PASSWORD='gtid123',
MASTER_PORT=3306,
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=4,
MASTER_CONNECT_RETRY=10;
> START SLAVE;
mysql> show slave status\G
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.221.133Master_User: gtidMaster_Port: 3306Connect_Retry: 10Master_Log_File: master-bin.000001Read_Master_Log_Pos: 154Relay_Log_File: node01-relay-bin.000002Relay_Log_Pos: 369Relay_Master_Log_File: master-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes
....
重点看这两个线程
Slave_IO_Running: YesSlave_SQL_Running: Yes
Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
错误原因:链接时输入的bin_log二进制名错了
解决办法:主库 show master status \G ,查看二进制名
stop slave;
CHANGE MASTER TO
MASTER_HOST='192.168.221.133',
MASTER_USER='gtid',
MASTER_PASSWORD='gtid123',
MASTER_PORT=3306,
MASTER_LOG_FILE='master-bin.xxxxx',
MASTER_LOG_POS=4,
MASTER_CONNECT_RETRY=10;
start slave;
# 1. 数据库root密码不对或者密码过期时间导致
mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect
解决办法:修改数据库root密码
use mysql;
update mysql.user set authentication_string=password('123') where user='root';
flush privileges;
修改密码过期时间
update user set password_expired='N' where user='root';
# 2. 没有配置mysql 的server id
ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional e
解决办法:编辑/etc/my.cnf
修改三台的server id 为不同数值
# 3. 没有打开bin_log日志
Got fatal error 1236 from master when reading data from binary log: 'Binary log is not open'
解决办法:配置文件如上,添加bin_log日志并重启服务
等等错误
日志文件所有的报错信息都很清楚,例如:
#截取部分
cat /var/log/mysqld.log
# bin_log 日志没有开启
2022-11-17T23:14:39.667951Z 5 [ERROR] Error reading packet from server for channel '': Binary log is not open (server_errno=1236)
2022-11-17T23:14:39.667966Z 5 [ERROR] Slave I/O for channel '': Got fatal error 1236 from master when reading data from binary log: 'Binary log is not open', Error_code: 1236
#
2022-11-17T23:07:11.531128Z 0 [ERROR] InnoDB: Table `mysql`.`innodb_table_stats` not found.
2022-11-17T23:07:11.531162Z 0 [ERROR] InnoDB: Fetch of persistent statistics requested for table `mysql`.`gtid_executed` but the required system tables mysql.innodb_table_stats and mysql.i
Mysql-error code汇总
常见报错收集