mysql主从复制
Mysql主从复制 Mysql可以在window和linux平台进行使用,这里使用linux的作为mysql的系统环境,实现mysql的主从复制,使用虚拟机安装centos7的linux环境,mysql版本使用5.6。一:环境准备 虚拟机安装centos7可以参考:http://www.centoscn.com/image-text/setup/2014/0723/3
Mysql主从复制
Mysql可以在window和linux平台进行使用,这里使用linux的作为mysql的系统环境,实现mysql的主从复制,使用虚拟机安装centos7的linux环境,mysql版本使用5.6。
一:环境准备
虚拟机安装centos7可以参考:http://www.centoscn.com/image-text/setup/2014/0723/3341.html
Cenos7安装mysql可以参考:
http://www.centoscn.com/mysql/2016/0315/6844.html
navicat连接mysql:http://www.cnblogs.com/yjdcoder/p/5927358.html
注意开放mysql的端口:
firewall-cmd --permanent--zone=public --add-port=3306/tcp
firewall-cmd --permanent --zone=public--add-port=3306/udp
firewall-cmd –reload 设置新的防火墙规则生效
二:Mysql主重复制
场景描述:
主数据库服务器:192.168.9.161,mysql已经安装,并且无应用数据。
主数据库服务器:192.168.9.163,mysql已经安装,并且无应用数据。
2.1主服务器进行的操作
1,在192.168.9.161机器上启动mysql服务,输入:sudo systemctl start mysqld;
2,为了方便我这里使用root用户登入mysql,mysql -u root –p,输入密码进行登入。(也可以自己创建一个新的用户,用于主从服务器的操作,注意需要给这个用户授权)
3,授权给从数据库服务器,使从数据库服务器的用户能操作主数据库:
GRANT REPLICATION SLAVE ON *.* to 'root'@'192.168.9.163' identifiedby ‘root’;
4,修改mysql的配置文件my.cnf:
[mysqld]
# Remove leading # to turn on a very important data integrityoption: logging
# changes to the binary log between backups.
log_bin
#
# Remove leading # to set options mainly useful for reportingservers.
# The server defaults are faster for transactions and fastSELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=22
# Disabling symbolic-links is recommended to prevent assortedsecurity risks
symbolic-links=0
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#log-bin=/var/log/mysqld/mysql-bin
[mysqld]
character_set_server = utf8
[mysql]
default-character-set = utf8
注意:
1)去掉log_bin的注释,开启mysql的操作日志
2)设置server-id=22,server-id的值要在mysql主从服务器中唯一,建议取ip的最后一个字段,比如我这里可以取161。
5,关闭主数据库的服务,重启主数据库
systemctl stop mysqld;
systemctl start mysqld;
6,查看主数据库的状态
登入mysql数据库,输入:show master status命令,看到如下效果:
记录上面图片的file和position的值,在后面配置从服务器的时候需要使用。
注意:
如果在前面没开启log_bin,那么输入:showmaster status,不会有数据出现,效果如下:
上面的图片显示的是一个空的结果,这时候就需要注意开启mysql操作的日志了,mysql的版本不同可能开启mysql操作日志不一样,如果你的版本里面没有log_bin开启mysql操作日志的就需要网上找相关资料进行处理了。
2.2配置从服务器
1,修改从服务器的mysql的配置文件,vi /etf/my.cnf
# log_bin
#
# Remove leading # to set options mainly useful for reportingservers.
# The server defaults are faster for transactions and fastSELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql#/usr/local/mysq/data/mysql #/var/lib/mysql
socket=/var/lib/mysql/mysql.sock#/usr/local/mysq/data/mysql/mysql.sock#/var/lib/mysql/mysql.sock
character_set_server = utf8
server-id = 10
# Disabling symbolic-links is recommended to prevent assortedsecurity risks
symbolic-links=0
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql]
default-character-set = utf8
注意:
1)需要给从服务器的mysql的配置文件配置server-id = 10,并确保这个id没有被别的服务所使用
2,重启mysql服务,登入mysql,这里我使用的登入用户也是root。
3,执行同步sql语句,
mysql> change masterto
master_host='192.168.9.161',
master_user='root',
master_password='root',
master_log_file='mysql-bin.000015',
master_log_pos=690;
master_host:主服务器的ip
master_user:使用主服务器mysql的用户
master_password:对应用户的密码
master_log_file:数据库操作的日志文件
master_log_pos:读取日志文件的起始位置
4,正确执行同步sql后,需要启动Slave同步进程,启动命令:start slave
5,主从同步检查,使用show slavestatus\G命令,下面是正常输出的结果:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.9.161
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysqld-bin.000015
Read_Master_Log_Pos: 690
Relay_Log_File: mysqld-relay-bin.000010
Relay_Log_Pos: 854
Relay_Master_Log_File: mysqld-bin.000015
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
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 690
Relay_Log_Space: 1192
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 22
Master_UUID: 6d07bacc-4100-11e7-800e-000c2922ed86
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
注意:
1)要确保 Slave_IO_Running: Yes,Slave_SQL_Running: Yes
这两个值都为yes则表示状态正常,否则说明配置有问题。
2)如果主服务器已经存在应用数据,则在进行主从复制时,需要做以下处理:
(1)主数据库进行锁表操作,不让数据再进行写入动作
mysql> FLUSH TABLES WITH READ LOCK;
(2)查看主数据库状态
mysql> show master status;
(3)记录下 FILE及 Position 的值。
将主服务器的数据文件(整个/opt/mysql/data目录)复制到从服务器,建议通过tar归档压缩后再传到从服务器解压。
(4)取消主数据库锁定
mysql> UNLOCK TABLES;
2.3验证主从复制效果
1,主服务器的操作
在主服务器的数据库上创建first_db: create database first_db;
在主服务器的first_db数据库中,创建表first_tb:
DROP TABLE IF EXISTS `first_tb`;
CREATE TABLE `first_tb` (
`id` int(11) NOT NULLAUTO_INCREMENT,
`name` varchar(30)DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
在主服务器上的表first_tb中插入记录:
insert into first_tb(name) values ('jacktest13');
2,在从服务器上查看
查看创建的数据库:show databases;
通过上面的图可知,first_db数据库已经生成。
使用use first_db;show tables;命令查看表
通过上图,可知表已经创建。
使用select * from first_tb;命令查看表里面的数据。结果如下:
可以看到数据已经插入。记录已经存在,到这里整个主从复制的过程就完成了。
注意:
手动往从库插入数据,主库的数据不变,还会导致主从复制失败,需要修改从数据库的同步信息比如修改下面的命令:
stop slave;
changemaster to master_log_file='mysqld-bin.000011',master_log_pos=1230;
start slave;
参考:
http://www.cnblogs.com/luckcs/articles/2543607.html
http://blog.csdn.net/cutesource/article/details/5710645
更多推荐
所有评论(0)