mysql主从同步配置经验
来源:互联网 发布:淘宝账期保障类目 编辑:程序博客网 时间:2024/06/01 23:45
因为工作需要,公司要建一个数据库主从,很荣幸,这件事就落在了我头上。
作为一个对LINUX命令不熟,连安装MYSQL都只会按步骤来,出了错就一脸懵逼的程序员来,这将是一件很有挑战的事情。
万幸,在经过两天的不懈努力之后,终于完成了。
接下来,我将自己配置的过程和遇到的问题分享出来,希望能帮到同需配主从的朋友。
配置过程中遇到的错误会在结尾附上相应的解决方案。
配置过程中所有的名字和文件名我都按自己的理解的解释,可能不专业,甚至错误,希望能指出与谅解。
准备工作:
服务器两台:
分别是
master(主服务器IP:21)
slave(从服务器IP:23)
安装好mysql(讲真,大半时间浪费这里,安装MYSQL各种各样的问题出现)。
保持两服务器数据库之前表结构一至。
1.在21(master)下,给指定机器创slave用户
mysql> GRANT REPLICATION SLAVE ON *.* to 'slaveUser'@'ip' identified by 'password';
这一步是指给slave赋于可以登录、同步的用户。
IP为slave端的IP。
2.在21(master)下,查看master状态
mysql> show master status;
File:主库的日志文件
Position:日志文件标注的当前位置
Binlog_Do_DB:需要同步的库
Binlog_Ignore_DB:忽略同步的库
Executed_Gtid_Set:–
这一步是查看主服务是否配置了记录binlog,如果出现empty set,你需要在配置文件里加入log-bin,slave也要在配置加上。(参照结尾:E-1)
3.在23(slave)下,设置mysql配置文件中的server-id
server-id = 20
server-id:暂时没明白,应该是slave端向master请求的一个唯一标识,此值避免与其他的slave一样,否则将会失败。
4.在21(master)下,停止对界对数据库的操作
mysql> FLUSH TABLES WITH READ LOCK;
5.将主库原来有的数据移至从库
将主服务器的数据文件(安装mysql时设置的data目录下)复制到从服务器,建议通过tar归档压缩后再传到从服务器解压。
如果你配置的指定库,那么只复制指定文件了。
6.在21下,查看master的值
mysql> show master status;
在这里查看时,position值与上次查看不一样了,这是因为在我们操作的过程中,有人操作了数据,所以这个值被改变,而执行同步时,这个值是不能变的。
7.在23(slave)下,设置slave的参数
记录File与Position的值。
mysql> change master tomaster_host='21',master_user='slaveUser',master_password='password',master_log_file='mysql-bin.000001',master_port=3306,master_log_pos=980;
master_host:主服务器的IP
master_user:在第一步设置的用户名
master_password:在第一步设置的密码
master_log_file:日志文件,主服务器中的show master status时的File值
master_log_pos:日志位置,主服务器中的show master status时的Position值
master_port:主服务对外端口
8.在23(slave)下,启动slave
mysql> start slave;
查看slave状态:
mysql> show slave status\G
***************** 1. row *****************
Slave_IO_State: Waiting for master to send event
Master_Host: 21
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 980
Relay_Log_File: rzserv-relay-bin.000003
Relay_Log_Pos: 286
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: zyr
Replicate_Ignore_DB: test,mysql,performance_schema,information_schema
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table: zyr.t_user
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 810
Relay_Log_Space: 460
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 10
Master_UUID: 86d76e97-66e2-11e7-9d9b-000c290bca56
Master_Info_File: /usr/local/mysql-5.6.31/data3306/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
状态中,
Slave_IO_Running
Slave_SQL_Running
这两个状态都为Yes时,才算成功,如果出现
Slave_IO_Running:connecting
Slave_SQL_Running:No
任意一种,是失败的,解决方案参照E-2
9.在21(master)下,放开主库锁定
mysql> unlock tables;
到此,主从配置成功完成,接下来就是去数据库里验证了。
以下是主从配置时,如果需要指定库和表同步,可以在master端或是slave中mysql数据库配置文件(my.cnf)中设置:
master端:
二进制需要同步的库
binlog-do-db=test
binlog-do-db=test2
不需要同步的库
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
slave端:
要复制的数据库
replicate-do-db=dbName
不复制的数据库
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema
replicate-ignore-db=information_schema
要复制的表
replicate-wild-do-table=db.table1
replicate-wild-do-table=db.table2
不复制的表
replicate-wild-ignore-table=db.table1
replicate-wild-ignore-table=db.table2
可以使用通配符:%
如:
db中,同步所有t_开头的表
replicate-wild-ignore-table=db.t_%
在上述我显示出来slave状态中可以看到,我只同步了zyr库中的t_user表。
不同步test,mysql,performance_schema,information_schema
设置的时候,请务必将mysql这个库设置不同步,以免引起不必要的麻烦。
E-1:
mysql> show master status;
出现empty set,怎么办?
在配置文件中,加入
log-bin=mysql-bin
这一行
附:如何查看mysql配置文件?
E-2:
不管哪种错误,先停止同步:
mysql> slave stop;
Slave_IO_Running:connecting
这是指连接中,一般都是slave端change master to时,参数错误了,需要仔细对照,或是直接重新设置第6步,保证参数正确。
Slave_SQL_Running:No
一般是事务回滚,或是有人操作了slave端要同步的数据库
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
以上,就是在配置过程中遇到的问题和解决的方法,如果发现别的问题,欢迎交流学习。
- mysql主从同步配置经验
- MYSQL 主从同步配置
- Mysql 主从同步配置
- mysql主从同步配置
- mysql主从同步配置
- mysql主从同步配置
- mysql主从同步配置
- mysql主从同步配置
- Mysql主从同步配置
- MySQL主从同步配置
- mysql主从同步配置
- mysql主从同步配置
- mysql主从同步配置
- mysql 配置主从同步
- mysql 主从同步配置
- MySQL 主从同步配置
- mysql 主从同步配置
- mysql主从同步配置
- 微信测试号加菜单
- 03 CSS-盒模型和标准文档流(行内元素和块级元素)
- spring 源码学习
- brew使用
- 前端CSS面试题详解
- mysql主从同步配置经验
- 关于模拟指针代码的一点问题
- 【安全牛学习笔记】本地提权
- Jsoup获取DOM元素
- Solidity安装
- 一些支付上的术语
- 仅需拖拽无需编程的云端可视化深度学习平台(附教程)
- Ambari安装hive组件出现need string or buffer, NoneType found
- [Azure]ARM模式下制作映像并创建虚拟机