由于项目以后可能会用到关于数据库备份,主要是用主从复制,来实现数据库的读写分离等功能。在这几天对mysql 的主从配置研究了下,我在电脑上配置了两个mysql 数据,配置还真有点麻烦。。关键还是对mysql 的数据库的了解不够,导致的,闲话不说了,现在开始配置。。
1.首先在本机(Windows)上配置两个数据库。
我下载的是mysql 的noinstall 版本的,安装版的好像要折腾一番,好麻烦,试了下,觉得不爽,就下载免安装版的了。
下载好以后,修改下mysql 的配置文件,把my-small.ini 复制下,改成my.ini,默认端口是3306,就不修改了。然后要开启服务,然后启动服务。开始用cmd 来写命令,后来觉得老是这样太麻烦了,又看了下bat 的语法。随便写了几个简单的bat 脚本。。在调试过程中方便好多。。把这些保存后放在解压后的mysql 根目录下。
(1)安装mysql1 服务
@echo off bin\mysqld.exe --install mysql1 --defaults-file="D:\mysql5.1\mysql1\my.ini" PAUSE
(2)移除mysql1 服务
@echo off bin\mysqld.exe --remove mysql1 PAUSE
(3)启动mysql1服务
@echo off net start mysql1 PAUSE
(4)停止mysql 1服务
@echo off net stop mysql1 PAUSE
第二个mysql 的也一样,不过要注意的是,服务名要不一样才行。我起的名是mysql2,而且my.ini 的端口也要不同,我的是3307.
ps:我的两个mysql 是完全隔离的,完全复制两个免安装版本,好像说一个免安装文件就行了,配置路径不同就行了。
遇到问题:在mysql 启动的过程中,遇到了1067 的错误码提示。。我的解决方案是配置下my.ini 增加下面几项,然后重启服务,解决问题。
[mysqld]
#设置basedir指向mysql的安装路径
basedir=D:\mysql5.1\mysql1
datadir=D:\mysql5.1\mysql1\data
还遇到个问题是,初始帐号密码的修改。。可以用cmd 命令行修改。
c:/mysql/mysql1/bin> mysqladmin -u root password newpass
上面在同一台机上安装好了两个mysql 的数据库了。 下面开始配置主从。。
2.mysql数据库主从配置
(1)master 配置
首先,为了复制的安全性,给slave 个专门创建个复制mysql 的帐号,并赋予权限。
CREATE USER 'repl'@'localhost' IDENTIFIED BY 'root';
GRANT REPLICATION ON *.* TO 'repl'@'localhost'
接下来,配置my.ini
#数据库主从配置开始 #本机数据库ID 标示为主 server-id = 1 #二进制需要同步的数据库名 binlog-do-db=yyweb # Uncomment the following if you want to log updates #启动二进制日志系统 log-bin=mysql-bin #数据库主从配置结束
然后重启下mysql1 的服务。然后进入mysql 命令行,输入以下命令查看状态。
mysql> show master status\G
*************************** 1. row **************************
File: mysql-bin.000002
Position: 671
Binlog_Do_DB: yyweb
Binlog_Ignore_DB:
1 row in set (0.00 sec)
(2)slave 配置
首先,配置my.ini
server-id = 2
#从服务器ID号,不要和主ID相同
master-host =127.0.0.1
#指定主服务器IP地址
master-user =repl
#制定在主服务器上可以进行同步的用户名
master-password =root
#密码
master-port =3306
#同步所用的端口
master-connect-retry=60
#断点重新连接时间
replicate-ignore-db=mysql
#屏蔽对mysql库的同步
replicate-do-db=yyweb
#同步数据库名称
然后重启下mysql2 的服务。然后进入mysql 命令行,输入以下命令查看状态。
mysql> show slave status
如果成功的话,可以查看到其中的两列
SLAVE_IO_RUNNING:YES
SLAVE_SQL_RUNNING:YES
如有其中有一列为NO,说明是连接不成功的。则检查下my.ini 的配置。
以下是成功连接后,在master 添加数据后,slave 的状态
mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 127.0.0.1 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 671 Relay_Log_File: trye-relay-bin.000008 Relay_Log_Pos: 816 Relay_Master_Log_File: mysql-bin.000002 ·········以下省略
遇到问题:开始的时候把master 的用户名密码写错了,查看slave 的状态的时候老是SLAVE_SQL_RUNNING:NO,经过一段时间检查,发现mysql 的日志这东西还真不错。。哈哈。。mysql 的日志文件在data 下面非文件夹。。一个个查看便是。。其中有一个master.info 的文件,记录了该主服务器的信息,还有一些错误日志等,如果有错误信息可以很清楚的看到。
mysql 主从配置完毕,总结一点是,对mysql 的配置文件不熟,以上也是参考网上进行配置的,所以有写具体的问题,未能清楚说明,还有待深入了解mysql 的官方文档。。