MySQL主从库配置和主库宕机解决⽅案
原理:MySQL从库上有⼀个IO线程负责从主库取binlog写到本地,另外有⼀个SQL线程负责执⾏这些本地值⽇,实现命令重做
⼀、准备⼯作
系统:CentOS
软件包:mysql-5.6.
master服务器:192.168.1.112
slave服务器1:192.168.1.102
slave服务器2:192.168.1.104
⼆、修改master服务器配置
vi /etc/myf
[mysqld]
log-bin=mysql-bin #必选项,启⽤⼆进制⽇志,值为⽇志⽂件名前缀,该⽇志⽂件存储位置为mysql数据库⽬录
server-id=112 #必选项,服务器唯⼀ID,默认是1,⼀般取IP最后⼀段
binlog-do-db=mydb #可选项,需要同步的数据库,如果没有本⾏,即表⽰同步所有的数据库
binlog-ignore-db=mysql #可选项,被忽略的数据库
三、修改slave服务器1配置
vi /etc/myf
[mysqld]
log-bin=mysql-bin #可选项,启⽤⼆进制⽇志,可是主库宕机后升级从库为主库时仍然需要设置,所以现在⼀起启⽤也可以
server-id=102 #必选项,服务器唯⼀ID
replicate-do-db=mydb #可选项,需要同步的数据库名,不写本⾏表⽰同步所有的数据库
四、重启所有服务器上的mysql服务
建议先⼿动同步⼀下主从服务器中要备份的数据库
service mysqld restart #如果mysql没有配置为系统服务,命令为/etc/init.d/mysql restart
五、在master服务器上建⽴⽤于同步的账户并授权slave
mysql -u root -p
Enter password:root
mysql>create user 'mymaster'@'%' identified by 'mymaster';
mysql>grant replication slave on *.* to 'mymaster'@'%' identified by 'mymaster';#⼀般不⽤root账号,%表⽰所有从库都可以连,也可以指定从库IP增强安全性
六、登录master服务器的mysql,查看master状态
mysql>show master status;
+------------------+----------+--------------+------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      120 |              |                  |
+------------------+----------+--------------+------------------+
七、配置两台slave服务器
mysql>change master to
master_host='192.168.1.112',master_user='mymaster',master_password='mymaster',master_log_file='mysql-bin.000001',master_log_pos=120;#连接master
mysql>start slave; #启动slave的复制功能
⼋、登录slave的mysql,查看从库状态
mysql>show slave status\G; #以下是部分结果
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event#从库状态,已连上主库
Master_Host: 192.168.1.112#master地址
Master_User: mymaster#master⽤户
Master_Port: 3306#master端⼝
Connect_Retry: 60#重试时间,默认是60秒
Master_Log_File: mysql-bin.000001#master的binlog⽂件名
Read_Master_Log_Pos: 1556#同步读取⼆进制⽇志的位置,⼤于等于Exec_Master_Log_Pos
Slave_IO_Running: Yes#必须为Yes,此线程把master段的⽇志写到本地
Slave_SQL_Running: Yes#必须为Yes,此线程把写到本地的⽇志应⽤于数据库
Replicate_Do_DB:#同步数据库名(如果有)
Replicate_Ignore_DB: #忽略数据库名(如果有)
Exec_Master_Log_Pos: 1556#执⾏同步命令的位置
Last_IO_Errno: 0#最近IO出错位置
Last_IO_Error: #最近IO出错信息
Last_SQL_Errno: 0#最近SQL出错位置
Last_SQL_Error: #最近SQL出错信息
Master_Server_Id: 112#master服务器ID
Master_Info_File: /data/mysqldb/master.info#master.info⽂件位置,位于该slave中
1 row in set (0.00 sec)
如果Slave_IO_Running和Slave_SQL_Running均为Yes,则slave配置完成
九、主从服务器测试
在master中创建数据库,创建表,进⾏增删改操作都会被同步到所有slave中
⼗、主库宕机解决⽅案
假设发⽣了突发事件,master宕机,现在的需求是要将192.168.1.102提升为主库,另外⼀个为从库
步骤:
1.确保所有的relay log全部更新完毕,在每个从库上执⾏stop slave io_thread; show processlist;直到看到Has read all relay log,则表
⽰从库更新都执⾏完毕了
2.登陆所有从库,查看master.info⽂件,对⽐选择pos最⼤的作为新的主库,这⾥我们选择192.168.1.102为新的主库
3.登陆192.168.1.102,执⾏stop slave; 并进⼊数据库⽬录,删除master.info和relay-log.info⽂件, 配置myf⽂件,开启log-bin,如果有
log-slaves-updates和read-only则要注释掉,执⾏reset master
4.创建⽤于同步的⽤户并授权slave,同第五⼤步骤
5.登录另外⼀台从库,执⾏stop slave停⽌同步
6.根据第七⼤步骤连接到新的主库
7.执⾏start slave;
8.修改新的master数据,测试slave是否同步更新
mysql下载配置
⼗⼀、其他
1.如果修改了主服务器的配置,记得删除从服务器上的master.info⽂件。否则从服务器使⽤的还是⽼配置,可能会导致错误。
2.如果你想使⽤复制数据⽂件的⽅式来备份数据库,只要在从服务器上的mysql命令⾏先键⼊stop slave;然后复制数据库⽂件,复制
好了,再 在mysql命令⾏键⼊start slave;启动从服务器,这样就即备份了数据有保证了数据完整性,⽽且整个过程中主服务器的
mysql⽆需停⽌。并且如果在此期间master的数据有改动,在下次start slave时数据也会同步更新过来
3.Slave_IO_State的取值
空 //复制没有启动
Connecting to master//没有连接上master
Waiting for master to send event//已经连上
4.双机互备则是两个mysql同时配置为master及slave
5.主服务器上的相关命令:
show master status
show slave hosts
show {master|binary} logs
show binlog events
purge {master|binary} logs to 'log_name'
purge {master|binary} logs before 'date'
reset master(⽼版本flush master)
set sql_log_bin={0|1}
6.从服务器上的相关命令
start slave
stop slave
stop slave io_thread
start slave is_thread
stop slave sql_thread
start slave sql_thread
reset slave
SET GLOBAL SQL_SLAVE_SKIP_COUNTER
load data from master
show slave status(SUPER,REPLICATION CLIENT)
CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= #动态改变master信息PURGE MASTER [before 'date'] #删除master端已同步过的⽇志

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。