mysql的主从复制与读写分离

为什么Mysql要做主从复制(读写分离)?
通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低
为了提升业务系统性能,优化用户体验,可以通过主从复制(读写分离)来减轻主数据库的负载
而且如果主数据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失。
主从复制(读写分离):一般需要两台及以上数据库服务器即可(一台用于写入数据,一台用于同步主的数据并用于数据查询操作)
局限性:
(1)、配置好主从复制之后,同一张表,只能对一个服务器写操作。如果在从上执行了写操作,而之后主也操作了这张表,或导致主从不同步;据说可以配置成主主复制
(2)、主数据库服务器当即,需要手动将业务切换到从数据库服务器,无法做到高可用性
数据库集群是由N台数据库服务器组成,数据的写入和查询是随机到任意一台数据库服务器的,其他数据库服务器会自动同步数据库的操作。

主从复制的实验:
两台装有mysql的linux服务器
两台设备上面已经安装好mysql,两台设备的ip地址分别为:192.168.40.128和192.168.40.131,是同一个内网的
mysql的版本选择是5.6
我实验的两台设备不是线上的设备,但是为了保险起见,在/etc/my.cnf这个目录中修改mysql的配置文件。
在主服务器的配置文件中添加如下的配置:

[mysqld]
server-id=1
log-bin=mysqlmaster-bin.log
sync_binlog=1
innodb_buffer_pool_size = 512M
innodb_flush_log_at_trx_commit=1
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO
lower_case_table_names=1
log_bin_trust_function_creators=1

然后重启mysql
在主服务器上创建用户主从复制的账户:

mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.40.128' IDENTIFIED BY 'repl';

主数据库锁表(禁止再插入数据以获取主数据库的二进制日志坐标):

FLUSH TABLES WITH READ LOCK;

然后再打开一个ssh会话,进入到mysql的命令行

show master status;

在这个例子中,二进制日志文件是mysqlmaster-bin.000001,位置是331,记录下这两个值,稍候要用到。
在主数据库上使用mysqldump命令创建一个数据快照

mysqldump -uroot -ptiange1003 -h127.0.0.1 -P3306 --all-databases  --triggers --routines --events >all.sql

解锁主数据库的锁表操作:

unlock tables;

在主服务器上使用scp命令将all.sql上传到从数据库的某个路径下

scp /root/all.sql [email protected]:/root/

然后在从数据库上将all.sql这个文件导入到数据库:

mysql -uroot -p -h127.0.0.1 -P3306 < all.sql

给从数据库设置复制的主数据库信息:mysql -u root -p

CHANGE MASTER TO MASTER_HOST='192.168.40.129',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysqlmaster-bin.000001',MASTER_LOG_POS=331;  (其中的ip地址是主数据库服务器的ip地址)
start slave;
show slave status \G
mysql的主从复制与读写分离_第1张图片
image.png

Slave_IO_Running和Slave_SQL_Running这两个参数都是YES,说明配置成功。下面在主数据库上进行修改测试验证。
在主数据库里面做修改,然后在从数据库里面进行检验

你可能感兴趣的:(mysql的主从复制与读写分离)