mysql主从复制的介绍与搭建

1,mysql主从复制的理解图:

 

2,mysql主从复制的概念和好处:

mysql的主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是实时的业务数据操作,从数据库常用的读取为主。

优点主要有

1,可以作为备用数据库进行操作,当主数据库出现故障之后,从数据库可以替代主数据库继续工作,不影响业务流程

2,读写分离,将读和写应用在不同的数据库与服务器上。一般读写的数据库环境配置为,一个写入的数据库,一个或多个读的数据库,各个数据库分别位于不同的服务器上,充分利用服务器性能和数据库性能;当然,其中会涉及到如何保证读写数据库的数据一致,这个就可以利用主从复制技术来完成。

3,吞吐量较大,业务的查询较多,并发与负载较大。

3,windows上的mysql主从复制搭建:

1,所谓mysql的主从,我们首先应该准备好两个数据库,为了避免接口冲突,我的一台mysql的服务器的端口为3306,另一台服务器的端口号为3307,端口号在mysql的配置文件my.ini中配置。

主服务器配置:

[mysqld]
#mysqld 配置
port=3307
basedir=D:\laravel\mysql2
datadir=D:\laravel\mysql2\data

从服务器的端口部分配置:
[mysqld]
port=3306
basedir="F:/myphp_www/PHPTutorial/MySQL/"
datadir="F:/myphp_www/PHPTutorial/MySQL/data/"

2,在我新配置的主数据库上,需要配置mysql的服务于启动:

首先使用管理员身份运行cmd,跳转到mysql中的bin目录。安装mysql的服务:mysqld install mysql2 --defaults-file="c:\wamp\bin\mysql2\mysql5.6.17\my.ini"

红色字体的mysql2是我配置的环境变量:

启动mysql服务。

        net start mysql   启动mysql服务

       Net stop mysql   停止mysql服务

              

              

3,配置mysql的主从复制,我的这里是端口号为3307的为主数据库,3306的为从数据库,在主数据库上添加主从复制的mysql账号,两个数据库链接的纽扣:

GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.*

TO [email protected]'%'

IDENTIFIED BY '123456';

一个账号为mysql_backup的用户创建成功了,密码为123456

刷新数据库权限:flush privileges;

4,配置主服务器,这里注意两台服务器的server_id不可以一样,现在我的主服务器的配置如下:

[mysqld]
#mysqld 配置
port=3307
basedir=D:\laravel\mysql2
datadir=D:\laravel\mysql2\data
server-id=1 
log-bin=mysql-bin#开启了二进制文件
binlog_do_db=follow#主从复制的数据库
binlog_ignore_db=mysql#不参与数从复制的数据库,例如mysql
binlog_checksum=none#mysql主从复制版本高
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

配置完成只好在cmd中重启我的mysql2
navicat中重启master之后并查看master的状态:SHOW MASTER STATUS

重置master:reset master;

5,配置从服务器,

[mysqld]
port=3306
basedir="F:/myphp_www/PHPTutorial/MySQL/"
datadir="F:/myphp_www/PHPTutorial/MySQL/data/"
character-set-server=utf8
default-storage-engine=MyISAM
server_id=2
log-bin=mysql-bin
binlog-do-db=follow#同步的数据库
binlog-ignore-db=mysql#同步的数据库

重启mysql之后通过配置的账号密码链接主数据库,根据master的状态自定:CHANGE MASTER TO master_host = '127.0.0.1',
 master_user = 'mysql_backup',
 master_password = '123456',
 master_log_file = 'mysql-bin.000004',
 master_port = 3307;
 master_log_pos = 120;

重启slave:START SLAVE

重置slave:RESET SLAVE

查看从数据库的状态:show slave status;

当相应的结果中,slave_IO_Running与slave_SQL_Running两个线程都为Yes时,主从配置成功。

Linux的mysql主从复制搭建:

跟本地一样,搭建mysql主从复制,首先需要两台数据库,我是两台服务上直接搭建的mysql主从复制

1,首先在主机上赋予丛机的权限,如果有多台从机的话,就赋予多次:GRANT REPLICATION SLAVE ON *.* TO [email protected]'118.24.89.47' IDENTIFIED BY '1234';

然后进入数据库执行:select user,host from mysql.user;

可以看到这里给了从机ip为118的一个权限,账号为slave.

2,然后就需要设置主机数据库的my.cnf,设置主机标识的service-id,确保可写的二进制log_bin文件,具体如下:

server_id=1#主机的标识
log-bin=mysql-bin.log#确保可写入的日志文件
binlog_format=mixed#二进制日志的格式,

binlog-do-db=master#允许主从复制数据库
binlog-ignore-db=mysql#不允许主从复制的数据库

~~~~~~~~~~~~~~~~~~~~重新启动mysql服务

3,配置丛机的配置,同样也是在my.cnf的配置文件中,注意service_id不可重复:

server_id=2#主机的标识
log-bin=mysql-bin.log#确保可写入的日志文件
binlog_format=mixed#二进制日志的格式,
replicate_wild_do_table=oldboy.%
replicate_wild_ignore_table=mysql.%

4,给主机的(1)mysql  锁表,(2)查询master的状态,并(3)解锁:

(1)flush tables with read lock;

(2)show master status;(是查看当前bin-log日志的位置点)

file:生成的二进制日志

position:随着bin_log的日志文件更新内容,发生的变化

binlog_do_db:主从复制的数据库

binlog_ignore_db:不允许主从复制的数据库

(3)unlock tables;

5,在从库上链接主数据库,链接数据master_host='是主机的ip' 依次在数据上执行:

stop slave;

change master to master_host='119.27.169.173',master_user='slave',master_password='1234',master_log_file='mysql-bin.000006',master_log_pos=245;

start slave;

6,最后查看slave的状态:show slave status\G;

当Slave_IO_Running和Slave_SQL_Running线程都为yes是主从复制配置成功!

此博文有待更改,有什么错误还望各位及时指出!!!