时间:2021-07-01 10:21:17 帮助过:23人阅读
3. mysql实现主从复制的目的
Mysql配置主从复制的目的,是为了实现数据的备份,实现数据的高可用性和容错行
4、实现mysql复制要注意的细节
1)、每台mysql上都要有唯一的server_id,而且主服务器的id要比所有的从服务器的id要小。
2)、Master 可以有很多 Slave,但每个 Slave 只能有一个 Master
二、mysql主从复制实现
1、配置主从,开启二进制:
1)Master配置:
#Cat /etc/my.cnf
[mysqld] datadir=/var/lib/mysql log-bin=/var/lib/mysql/log-bin server-id = 1 binlog_format = 'MIXED'
重启mysql服务:
#systemctl restart mysql
2)Slave配置:
#Cat /etc/my.cnf
[mysqld] datadir=/var/lib/mysql server-id = 3 skip-grant-tables log_slave_updates = 1 read_only = 1
##skip-grant-tables、log_slave_updates和read_only是我额外添加的,可以不添加。只要陪配置server-id就可以了。
#重启slave服务器
#systemctl restart mysql
2、主库查看二进制:
先做一个全备份
# mysqldump -uroot --single-transaction -R --triggers -E --master-data --flush-logs --all-databases > xiaozhang.sql
进入master查看是否启用了日志
mysql> show variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON | +---------------+-------+ 1 row in set (0.00 sec)
3、主库创建同步用户
mysql> GRANT ALL ON *.* TO 'rsync'@'%' IDENTIFIED BY '123456'; mysql> FLUSH PRIVILEGES;
4、主库上查看数据结点
mysql> show master status; +----------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +----------------+----------+--------------+------------------+-------------------+ | log-bin.000007 | 120 | | | | +----------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
5、从库上面同步
mysql>CHANGE MASTER TO MASTER_HOST='10.100.10.10',MASTER_USER='rsync',MASTER_PASSWORD='123456',MASTER_LOG_FILE='log-bin.000007',MASTER_LOG_POS=120; mysql>start slave; ##开启slave模式
6、查看是否实现同步成功
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.200.6.51
Master_User: rsync
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: log-bin.000007
Read_Master_Log_Pos: 120
Relay_Log_File: szthdb02-relay-bin.000002
Relay_Log_Pos: 281
Relay_Master_Log_File: log-bin.000007
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
##可以发现Slave_IO_Running,和Slave_SQL_Running已经都为yes说明主从复制配置成功
三、配置过程常见错误分析
1、 Slave_IO_Running为No
查看日志你会发现有这个错误
[ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
错误分析:
出现这个问题一定是,你的MASTER_LOG_FILE的文件名不对。
解决方法:认真核对你的MASTER_LOG_FILE的文件名,看看是否是你在连接的时候多加了个空格。
2、 Slave_SQL_Running为No
错误分析:一般是slave机器重起后,事务回滚造成的。
解决办法:
mysql> stop slave ; mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mysql> start slave ;
四、添加备份脚本
脚本的的作用是周一到周五每天做一个增量备份,一个星期做一个全备
#!/bin/bash Mysqldump() { mysqldump -uroot --single-transaction -R --triggers -E --master-data --flush-logs --all-databases > /var/lib/mysql/`date +%F"-%H:%M"`.sql } Mysql (){ mysqladmin -uroot -p123456 flush-logs } crontab_dump () { cat /etc/crontab | grep "bash $0 Mysqldump " if [ $? -eq 0 ]; then echo "Task was writen, it will perform the task at 00:00" else echo "0 0 6 * * bash $0 Mysqldump " >> /etc/crontab fi } crontab_dump crontab_ mysqladmin () { cat /etc/crontab | grep "bash $0 Mysql " if [ $? -eq 0 ]; then echo "The port test has been written to the time task, and 00:00 will perform the task" else echo "0 0 1-5 * * bash $0 Mysql " >> /etc/crontab fi } crontab_ mysqladmin ##执行脚本后就基本实现了二进制+增备+全备
五、总结
以上就是我的实现过程,以及遇到问题的解决方法,也许你会认为很简单,但是但你配置到时候,总是会出现一些小问题,原因就是自己还不够小心严谨。所以以后要多注意才行。
Mysql主从复制以及常见错误问题分析
标签:span relay_log 重启 etc ide 维护 tables 复制配置 常见错误