mysql的主从复制会同步mysql数据库吗

mysql的主从复制会同步mysql数据库吗,第1张

mysql的主从复制开启之后,从数据库会立马复制主数据库中的数据。

然后,对主数据库进行增,删,改 *** 作之后,从数据库也会进行相同的 *** 作。

不过,对从数据库进行增,删,改 *** 作的话,对主数据库是没有任何影响的

主从复制理论上支持无穷大的从库个数,实际情况下,受服务器带宽和读写能力的影响

请参考MySQL官方手册的建议:

理论上,通过使用单个主服务器/多从服务器设置,可以通过添加更多的从服务器来扩充系统,直到用完网络带宽,或者你的更新负载已经增长到主服务器不能处理的点。

在获得的收益开始吃平之前,为了确定可以有多少从服务器,以及可以将你的站点的性能提高多少,需要知道查询模式,并且要通过基准测试并根据经验确定一个典型的主服务器和从服务器中的读取(每秒钟读取量,或者max_reads)吞吐量和写(max_writes)吞吐量的关系。通过一个假设的带有复制的系统,本例给出了一个非常简单的计算结果。

假设系统负载包括10%的写和90%的读取,并且我们通过基准测试确定max_reads是1200_2×max_writes。换句话说,如果没有写 *** 作,系统每秒可以进行1,200次读取 *** 作,平均写 *** 作是平均读 *** 作所用时间的两倍,并且关系是线性的。我们假定主服务器和每个从服务器具有相同的性能,并且我们有一个主服务器和N个从服务器。那么,对于每个服务器(主服务器或从服务器),我们有:

reads=1200_2×writes

reads=9×writes/(N1)(读取是分离的,但是写入所有服务器)

9×writes/(N1)2×writes=1200

writes=1200/(29/(N1))

最后的等式表明了N个从服务器的最大写 *** 作数,假设最大可能的读取速率是每分钟1,200次,读 *** 作与写 *** 作的比率是9。

如上分析可以得到下面的结论:

·如果N=0(这表明没有复制),系统每秒可以处理大约1200/11=109个写 *** 作。

·如果N=1,每秒得到184个写 *** 作。

·如果N=8,每秒得到400个写 *** 作。

·如果N=17,每秒得到480个写 *** 作。

mysql的主从复制开启之后,从数据库会立马复制主数据库中的数据。 然后,对主数据库进行增,删,改 *** 作之后,从数据库也会进行相同的 *** 作。 不过,对从数据库进行增,删,改 *** 作的话,对主数据库是没有任何影响的

在主服务器上建立一个为从服务器进行复制使用的用户。该账户必须授予 REPLICATION SLAVE 权限,由于仅仅是进行复制使用所以不需要再授予任何其它权限。

mysql> GRANT REPLICATION SLAVE ON TO 'replication'@'%'19216802' IDENTIFIED BY 'slavepasswd';

mysql> FLUSH PRIVILEGES;

3、编辑主服务器的配置文件:/etc/mycnf的[ mysqld ] 部分:

server-id = 本机数据库 ID 标示,该部分还应有一个server-id=Master_id选项,其中master_id必须为1到232之间的一个正整数值

log-bin = 二进制日志的位置和名称

binlog-do-db = 需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可

binlog-ignore-db = 不需要备份的数据库苦命,如果备份多个数据库,重复设置这个选项即可

1、编辑数据库配置文件mycnf,一般在/etc/目录下。

#vi /etc/mycnf

在[mysqld]的下面加入下面代码:

log-bin=mysql-bin

server-id=1

innodb_flush_log_at_trx_commit=1

sync_binlog=1

binlog-do-db=wordpress

binlog_ignore_db=mysql

server-id=1中的1可以任定义,只要是唯一的就行。

binlog-do-db=wordpress是表示只备份wordpress。

binlog_ignore_db=mysql表示忽略备份mysql。

不加binlog-do-db和binlog_ignore_db,那就表示备份全部数据库。

2、然后重启MySQL:

#service mysqld restart

3、登录MySQL服务器。

#mysql -uroot -p

在主服务器新建一个用户赋予“REPLICATION SLAVE”的权限。你不需要再赋予其它的权限。在下面的命令,把XXXX替换为从服务器的IP。

mysql>CREATE USER 'user'@ 'XXXX' IDENTIFIED BY 'password';

mysql>GRANT REPLICATION SLAVE ON TO 'user'@'XXXX' IDENTIFIED BY 'password';

4、执行以下命令锁定数据库以防止写入数据。

mysql>FLUSH TABLES WITH READ LOCK;

5、退出mysql命令行,导出数据库

#mysqldump -u root -p123456 --all-databases --lock-tables=false -- > /root/allsql

6、使用scp命令传输数据库文件allsql到从服务器。

#scp /root/allsql root@>

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'@'127001' identified by 'asdf';

GRANT REPLICATION SLAVE ON TO 'repl'@'127001'; -- --这里我指定数据库(test)时报错,而指定全库()时会成功。

4、保持主从mysql的test数据库初始状态一致。

一般是先将所有的表加读锁,然后copy磁盘上的数据库文件夹。我这里直接停止服务,然后将数据文件拷贝过去。

5、在主数据库里面运行show master status;记下file和position字段对应的参数。

mysql> show master status;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin000001 | 107 | test | |

+------------------+----------+--------------+------------------+

1 row in set (000 sec)

6、在从库设置它的master:

mysql> change master to master_host='127001',master_port=3306,master_user='repl',master_password='asdf',master_log_file='mysql-bin000001',master_log_pos=107;

Query OK, 0 rows affected (019 sec)

这里的master_log_file和master_log_pos对应刚才show master status记下的参数。

7、在从库开启从数据库复制功能。

slave start;

mysql> slave start;

Query OK, 0 rows affected (000 sec)

在从库可以通过show slave status来查看一些参数。

8 此时在主库创建表或插入数据,在从库就会很快也能看到了。

-- 主库

mysql> create table tianyc_02(b int);

Query OK, 0 rows affected (016 sec)

mysql> insert into tianyc_02 values(2013);

Query OK, 1 row affected (013 sec)

-- 从库

mysql> show tables;

+----------------+

| Tables_in_test |

+----------------+

| tianyc_01 |

| tianyc_02 |

+----------------+

2 rows in set (000 sec)

mysql> select from tianyc_02;

+------+

| b |

+------+

| 2013 |

+------+

1 row in set (000 sec)同理,可以搭建第二、第三个从节点。

利用mysql proxy来实现的。

MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。 当然,主服务器也可以提供查询服务。使用读写分离最大的作用无非是环境服务器压力。

以上就是关于mysql的主从复制会同步mysql数据库吗全部的内容,包括:mysql的主从复制会同步mysql数据库吗、mysql主从同步如何同步已有的数据,(mysql数据库主从同步原理)、mysql主从复制,是从库是拉还是推等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9554120.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存