当前位置:
文档之家› MYSQL数据库实时同步配置与常见问题解决方法
MYSQL数据库实时同步配置与常见问题解决方法
运行于主数据库
mysql> show master status;
+------------------+----------+--------------+------------------+
| File
| Position | Binlog_Do_DB | Binlog_Ignore_DB |
Connect_Retry: 30 Master_Log_File: mysql-bin.000009 Read_Master_Log_Pos: 204261590 Relay_Log_File: mail-relay-bin.000221
Relay_Log_Pos: 15149444 Relay_Master_Log_File: mysql-bin.000009
change master to master_log_file='mysql-bin.000004',master_log_pos=106;
概述
在做 web 应用系统中,如果数据库出现了性能瓶颈,而你又是使用的 MySQL 数据库,那么就可以考虑采用数据库 集群的方式来实现查询负载了。因为一般来讲一个系统中数据库的查询操作比更新操作要多的多,因此通过多台查询 服务器将数据库的查询分担到不同的查询数据库从而提高数据库的查询效率。
Slave_IO_Running: Yes Slave_SQL_Running: Yes
ReplicatDB: information_schema,mysql,test
红色的部分,分别表示的是 Master_Log_File 和 Read_Master_Log_Pos,即主数据库服务器上的日志文件和要读取 的主数据库服务器上的日志的位置,通常这个 Read_Master_Log_Pos 是和主数据库服务器上的 Position 是一致的(同步 以后),如果从数据库服务器还没有同步完毕,那么这个值通常比主数据库服务器上的要小。
先在主查看:
[root@drbd1 mysql]# mysql -u root –p >>>输入密码进入 mysql
mysql> show master status;
+------------------+----------+--------------+------------------+
| File
MySQL 数据库支持数据库的主从复制功能,使用主数据库进行数据的插入、删除与更新操作,而从数据库则专门用 来进行数据库查询,从数据库还可以建立多台,通过负载均衡来实现查询,这样就可以将更新操作与查询操作分离到 不同的数据库上,从而提高查询的效率,降低系统的负载。
三、启动与监控
1、监控主数据库服务器
1 row in set (0.00 sec)
其中 File 是表示日志记录的文件,而 Position 则是表示当前日志在文件中的位置,这个也是从数据库服务器上执
行复制操作必须的标识,后面的两个字段分别表示要记录的数据库名称和不需要记录的数据库名称,我们也可以在配
置文件中进行配置。
2、监控从数据库服务器
replication slave ——MySQL 数据库中表示复制的权限名称 repuser ——从数据库服务器登陆到主数据库服务器时用到的用户名称 host >192.168.2.95 ——从数据库 IP 地址
1
fyxadmin ——登陆密码 如果上述权限设置后,无法同步,可将其改为
mysql> grant select,insert,update,delete,replication slave on *.* to fyx@'192.168.2.95' identified by 'fyxadmin'; 配置完上述步骤后,就可以启动主数据库了。
二、从数据库配置
修改配置文件 [root@drbd1 mysql]# vi /etc/f skip-name-resolve //选项可以禁用 dns 解析,但是,这样不能在 mysql 的授权表中使用主机名了,只能使用 IP skip-grant-tables //如果你在 f 中的有添加“skip-grant-tables”,那么任何的帐号用任何的密码(当然也包括 空)都可以登录到 mysql 数据库了 max_connections=1000 // mysql 的最大连接数默认是 100, 这个数值对于并发连接很多的数据库应用是远远不够 的, 当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些 max_connect_errors=200 //出现某台 host 连接错误次数等于 max_connect_errors(默认 10) ,主机'host_name' 再次尝试时被屏蔽。
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |
106 |
|
|
+------------------+----------+--------------+------------------+
Mysql 同步配置
前言:测试成功为 redhat AS5 64 位系统平台,Mysql sever 为 mysql-5.1.42-linux-x86_64-glibc23 版本
一、主数据库服务器配置
修改 mysql 的配置文件(对于 windows 就是 MySQL 安装目录下的 my.ini 文件,对于 linux 通常就是 /etc/f 文 件),在配置文件中加入(或修改)
运行于从数据库 mysql> show slave status\G; mysql> show slave status\G; *************************** 1. row ***************************
3
Slave_IO_State: Waiting for master to send event Master_Host: 192.168.0.85 Master_User: synbj Master_Port: 3306
[root@drbd1 mysql]# vi /etc/f skip-name-resolve //选项可以禁用 dns 解析,但是,这样不能在 mysql 的授权表中使用主机名了,只能使用 IP skip-grant-tables //如果你在 f 中的有添加“skip-grant-tables”,那么任何的帐号用任何的密码(当然也包括 空)都可以登录到 mysql 数据库了 max_connections=1000 // mysql 的最大连接数默认是 100, 这个数值对于并发连接很多的数据库应用是远远不够 的, 当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些 max_connect_errors=200 //出现某台 host 连接错误次数等于 max_connect_errors(默认 10) ,主机'host_name' 再次尝试时被屏蔽。
注创建数据库并整理:
create database Lottery CHARACTER SET utf8 COLLATE utf8_general_ci //创建数据库并设置为 UFT8 格式
给主数据库授予一个可以进行复制的用户
[root@drbd1 mysql]# mysql -u root –p mysql> grant replication slave on *.* to fyx@'192.168.2.95' identified by 'fyxadmin' ; Query OK, 0 rows affected (0.00 sec)
| Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |
106 |
|
|
+------------------+----------+--------------+------------------+
server-id=2 log-bin=mysql-bin --在从服务器上启动日志记录,不是必须,但是官方建议 master-host=主机 --主数据库服务器的 IP 地址 master-user=用户名 --执行复制的用户名称,就是 grant 的用户,即 fyx master-password=密码 --复制用户的密码,就是 grant 的用户密码,即 fyxadmin master-port=端口 --主数据库服务器的端口,默认是 3306 master-connect-retry = 60 --与主服务器失去连接时,从服务器重新尝试连接的时间间隔。 replicate-do-db=dbname --需要同步的数据库
1 row in set (0.00 sec)
2
然后在从设置
mysql> slave stop; mysql>reset slave; mysql> change master to master_host='192.168.2.34',master_port=3306,master_user='fyx',master_password='fyxadmin',master_log_file='mysqlbin.000004',master_log_pos=106; Query OK, 0 rows affected (0.03 sec) mysql> slave start; Query OK, 0 rows affected (0.01 sec)