主从数据库数据同步,可以使用从数据库来实时备份主数据库,当主数据库被破坏,可以马上启用从数据库。
一、从C盘拷贝MYSQL到D盘,命名为MYSQL2
把"C:\MySQL" 修改为 "D:\MySQL2"
修改配置文件my.ini
[client]
port=3307
[mysqld]
port=3307
basedir="D:/MYSQL2/"
datadir="D:/MYSQL2/Data/"
安装一个新的MYSQL数据库,服务命名为MySQL2
在cmd命令行模式下
D:\MySQL2\bin>mysqld-nt install MySQL2 --defaults-file="D:\MySQL2\my.ini"
若出现 Service successfully installed,则服务安装成功;若出现install remove of the service denied,只需要打开cmd时
以管理员身份打开即可解决()!

好了,我们来到服务,启动MySQL2,当然也可以命令提示符来停止与启动
net stop MySQL2
net start MySQL2
//====小技巧===//
1、如要修改MySQL2服务路径:
运行regedit,进入注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL2
修改ImagePath的数据
D:\MYSQL2\bin\mysqld-nt --defaults-file=D:\MYSQL2\my.ini MySQL2
2、如要删除服务
sc delete MySQL2
3、如果提示1067错误,请检查一下my.ini文件,basedir="D:/MYSQL2/",datadir="D:/MYSQL2/Data/"里面的路径是否写错了。或
检查一下注册表MySQL2的ImagePath数据,--defaults-file="D:\MySQL2\my.ini"里面的路径是否写错了;
二、主从数据库同步示例
主数据库的配置(my.ini)
[mysqld]
server-id = 1
log-bin=mysqld-bin
replicate-do-db=test
port=3306
从数据库的配置(my.ini)
[mysqld]
server-id = 2
log-bin=mysqld-bin
master-host = 127.0.0.1
master-user = slave
master-password = 123
master-port = 3306
master-connect-retry=5
replicate-do-db=test #需要同步的数据库,很关键
log-slave-updates
port=3307
配置好了之后
net stop MySQL
net start MySQL
net stop MySQL2
net start MySQL2
重启即可,主数据的操作会自动更新到从数据库中。需要注意点是,从数据库的数据结构要保持和主数据库一致,不然不能同步主数据库的数据。
//====小技巧===//
MYSQL2的命令提示符,可以通过设置环境变量来实现,修改mysql.exe为mysql2.exe即可
//锁定所有表(不需要停止MYSQL服务器,可以有读的功能,保持网站继续正常运行)
FLUSH TABLES WITH READ LOCK;
//解除锁定
UNLOCK TABLES;
//显示主数据库状态
SHOW MASTER STATUS \G
//显示从数据库状态
SHOW SLAVE STATUS \G
//设定不同步的数据库,这些库的修改不会记录到日志(可以添加多行)
binlog-ignore-db = test
//设置同步的数据库(设置“从数据库”的配置文件,如果主的MYSQL数据库很多,而从的MYSQL数据库只有一个数据库,操作其他数据库的时候就会报错,从而终止从数据库不能实时的更新)
replicate-do-db=test
//新建一个专门备份的用户(Repl_slave_priv: Y)
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123';
FLUSH PRIVILEGES;
//在slave上执行 "LOAD TABLE FROM MASTER" 或 "LOAD DATA FROM MASTER"(Select_priv: Y,File_priv: Y,Repl_slave_priv: Y)
GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123';
FLUSH PRIVILEGES;
C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\my.ini
copy该ini文件存放到E:\MySQL\mysql_base,这个路径可以随意定义,并修改如下内容:
[client]
port=3307 #第一个数据库的默认端口是3306 这里需要另外启用一个端口
# The TCP/IP Port the MySQL Server will listen on
port=3307
# Path to installation directory. All paths are usually resolved relative to this.
basedir="E:\MySQL\MySQL Server 5.5\" #第二个数据库basedir
# Path to the database root
datadir="E:\MySQL\MySQL Server 5.5\data\" #第二个数据库datadir
若出现 Service successfully installed,则服务安装成功;若出现install remove of the service denied,只需要打开cmd时
以管理员身份打开即可解决!
找到刚才创建的MySQL2,将ImagePath修改成如下":
"E:\MySQL\MySQL Server 5.5\bin\mysqld" --defaults-file="E:\MySQL\mysql_base\ini\my.ini" MySQL2
参考:http://blog.chinaunix.net/uid-77311-id-3450734.html
----------------------------------------------------------------------
转自:http://www.cnblogs.com/yuechaotian/archive/2013/05/15/3080056.html
1、首先要在本地建立两个mysql服务(首先正常使用安装包安装第一个,第二个使用免安装版,参考这里),指定不同的端口。我
这里一个主(3306),一个从(3307)。
2、然后修改主配置文件:
[mysqld]
server-id = 1
binlog-do-db=test #要同步的数据库
#binlog-ignore-db=mysql #不同步的数据库,如果指定了binlog-do-db这里应该可以不用指定的
log-bin=mysql-bin #要生成的二进制日记文件名称
修改从配置文件:
[mysqld]
server-id = 2
log-bin = mysql-bin
replicate-do-db=test
3、在主库添加一个用户 repl 并指定replication权限
create user 'repl'@'127.0.0.1' identified by 'asdf';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'127.0.0.1'; -- --这里我指定数据库(test.*)时报错,而指定全库(*.*)时会成功。
4、保持主从mysql的test数据库初始状态一致。
一般是先将所有的表加读锁,然后copy磁盘上的数据库文件夹。我这里直接停止服务,然后将数据文件拷贝过去。
5、在主数据库里面运行show master status;记下file和position字段对应的参数。
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 107 | test | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
6、在从库设置它的master:
mysql> change master to
master_host='127.0.0.1',master_port=3306,master_user='repl',master_password='asdf',master_log_file='mysql-
bin.000001',master_log_pos=107;
Query OK, 0 rows affected (0.19 sec)
这里的master_log_file和master_log_pos对应刚才show master status记下的参数。
7、在从库开启从数据库复制功能。
slave start;
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
在从库可以通过show slave status来查看一些参数。
8. 此时在主库创建表或插入数据,在从库就会很快也能看到了。
-- 主库
mysql> create table tianyc_02(b int);
Query OK, 0 rows affected (0.16 sec)
mysql> insert into tianyc_02 values(2013);
Query OK, 1 row affected (0.13 sec)
-- 从库
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tianyc_01 |
| tianyc_02 |
+----------------+
2 rows in set (0.00 sec)
mysql> select * from tianyc_02;
+------+
| b |
+------+
| 2013 |
+------+
1 row in set (0.00 sec)
同理,可以搭建第二、第三个从节点。
备注:两个服务的serve_id必须不同,否则在开启复制功能时会提示错误
mysql> slave start;
ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO
我这里设置的主节点id为1,从节点id为2。也可以按照ip或端口进行设置,好用来区分。
注意:
* 主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。
* 如果主从的网络断开,从会在网络正常后,批量同步。
* 如果对从进行修改数据,那么很可能从在执行主的bin-log时出现错误而停止同步,这个是很危险的操作。所以一般情况
下,非常小心的修改从上的数据。
参考:http://bbs.chinaunix.net/thread-2297959-1-1.html
-------------------------------------------------------------
注意:mysql主从复制,主从版本要一致!正常情况下,主从mysql应该安装在两台服务器上
1.下载mysql的安装包
mysql官网:http://dev.mysql.com/downloads/mysql/
这里会有msi格式的和zip格式,msi格式的需要点击安装,这里不讲这个,接下来讲的是zip格式。
2.解压mysql的zip包
解压 zip 压缩文件,得到 一个文件夹 ,将其拷贝到你想要放的目录(比如我是放在D:/tools/mysql下
复制两份),然后分别将文件夹重命名为 mysql1 和 mysql2 。
3.安装主mysql
找到mysql1的配置文件模板D:\tools\mysql\mysql1 目录下的 my-default.ini,重命名为 my.ini,在 [mysqld] 标签下添加如下代码:
[mysqld]
basedir = D:\tools\mysql\mysql1
datadir = D:\tools\mysql\mysql1\data
binlog-do-db=test
binlog-ignore-db=mysql
log-bin=mysql-bin
- 1
- 2
- 3
- 4
- 5
- 6
- 7
注:
binlog-do-db=test 表示需要备份的数据库为test
*binlog-ignore-db=mysql 表示不需要备份的数据库为mysql
如果两个都不设的话,从服务器会复制主服务器的全部数据库
log-bin=mysql-bin 表示开启二进制日志,并把二进制日志前缀改为mysql-bin
其他的不用修改保存my.ini文件,然后以管理员的身份运行cmd,将工作目录切换到D:\tools\mysql\mysql1\bin下,运行
mysqld -install
- 1
- 2
如果提示“Service successfully installed”,则说明mysql服务安装成功,默认的服务名称为MySQL,端口号为3306,密码默认为空
连接mysql主服务器
mysql -uroot -p -P3306
- 1
- 2
然后创建新用户:
create user 'mytest'@'127.0.0.1' identified by '123456';
- 1
- 2
注:
@后面的ip地址为允许连接的客户端的ip地址。mytest是用户名,123456是密码
然后,给新用户配置主从复制的权限:
grant replication slave on *.* to 'mytest'@'127.0.0.1' identified by '123456';
- 1
- 2
注:
@后面的ip地址为允许连接的客户端的ip地址,如果改为 ‘%’,就表示客户端没有ip地址的限制
然后查看主服务master的状态:
mysql> show master status;
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000003 | 106 | test | mysql | |
+——————+———-+————–+——————+——————-+
注意:
记住file,和position,因为等下配置从数据库的时候会用到
4.安装从mysql
找到mysql2的配置文件模板D:\tools\mysql\mysql2 目录下的 my-default.ini,重命名为 my.ini,并修改如下这几项:
[client]
port = 3307
[mysqld]
port= 3307
basedir=D:\tools\mysql\mysql2
datadir=D:\tools\mysql\mysql2\data
server-id = 2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
保存my.ini后,用 管理员身份 运行cmd,并切换到D:\tools\mysql\mysql2\bin目录下,运行
mysqld install MySQL2 --defaults-file="D:\tools\mysql\mysql2\my.ini"
- 1
- 2
如果提示“Service successfully installed”则说明安装成功了,这时候我们连接从myslq
mysql -uroot -p -P3307
- 1
- 2
配置复制的参数:
change master to master_host=’127.0.0.1’,master_user=’mytest’,master_password=’123456’,master_port=3306,master_log_file=’mysql-bin.000003’,master_log_pos=106;
参数详解:
master_host: 主服务器的IP
master_user: 主服务器上新创建的用户名
master_password: 用户的密码
master_port: 主服务器的端口,如果未曾修改,默认即可。
master_log_file: 主服务器二进制日志文件的名称,填写查看主服务器的master状态时显示的File的值
master_log_pos: 日志的位置,填写查看主服务器的master状态时显示的Position的值
启动从服务的slave复制功能:
start slave;
- 1
- 2
查看从服务器的slave状态:
show slave status \G
- 1
- 2
***************** 1. row *****************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: mytest
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 106
Relay_Log_File: DESKTOP-DMGAKUM-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
如果 Slave_IO_Running 和 Slave_SQL_Running 的值都为 Yes,则说明主从复制的所有配置已成功,即从服务器已经可以自动与主服务器的数据库数据实现同步了。
此后,只要主服务器的数据有更新(比如:在 test数据库中新建了一张表或者表中的数据发生了变化),从服务器都会自动与主服务器保持一致。但如果有人刻意改变了从服务器的数据,主服务器中的数据并不会同步更新,除非我们把这两个MySQL服务器设置为互为主从。
注:
如果有任一个显示NO,则证明同步有问题。可以查看数据库日志文件,里面基本上会显示出错误之处,根据错误一步一步排查,基本上都可以解决的。数据库日志在data目录下,错误日志的后缀是.err
--------------------------------------------------------------------------------------------------
如果启动服务的时候提示:
本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止
去查看 .err文件,查看报错情况,如果出现:mysqld: Table 'mysql.plugin' doesn't exist windows
如果出现这个错误,需要把 先安装的 C:\ProgramData\MySQL\MySQL Server 5.7\Data\mysql 文件夹 拷贝到
E:\MySQL2\MySQL Server 5.7\Data ,然后重新启动,ok了
出现问题1:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
解决问题1:
方法一:
root密码为空时用下面命令修改, 修改成123456:
mysqladmin -u root -p password 123456
重新登录
mysql -uroot -p -P3306
ok!
问题2:
mysql> create user 'mytest'@'127.0.0.1' identified by '123456';
出现如下错误:
ERROR 1396 (HY000): Operation CREATE USER failed for 'mytest'@'127.0.0.1'
解决办法:
先删除,然后在重新创建
drop user 'mytest'@'127.0.0.1';
create user 'mytest'@'127.0.0.1' identified by '123456';