mysql主从复制
2016-03-23 02:21
441 查看
mysql主从复制
1 mysql的安装
2 mysql的数据同步
21相关准备
22主库配置
23从库配置
24主库与从库的同步
25主从复制的常见问题
2.安装mysql(以下的mysql-VERSION-OS代表mysql的文件名, /path/to/代表mysql文件的路径),在terminal终端中键入下列命令
3.在开启mysql服务之前删除文件夹下面的my.cnf,打开new.cnf,修改里面的socket为3306,修改new.cnf的文件名为my.cnf:
4.在终端中输入下列命令
5.ps -ef | grep mysqld查看是否开始启动mysql客户端
6.在终端中输入下列命令
进入mysql客户端输入下列命令进行mysql的root密码以及远程连接权限的修改(注意每条命令后都需要添加’;’)
7.关闭防火墙(也可通过命令打开指定端口,这里没有给出,因为后面需打开多个端口),在以下命令终端中输入
从库(slave): ip为192.168.1.11 port为3306
分别按照1.1的步骤在两台机器上安装如上配置的mysql
提示:
在修改完成之后重新启动mysql使配置文件生效。
2.查看主库状态,并记录
3.导出主库数据
note:注意,-A表示备份所有库, -B表示增加user DB和drop等参数(导库时会直接覆盖所有的)。
4.把主库备份的mysql数据迁移到从库
在从库所在的系统上
5.设置从属关系
登陆主库并设置数据同步的用户名和密码
登陆从库并开启主从同步
note:
只有当slave_io_running以及slave_sql_running都是yes的状态时,部署成功
6.主库解锁
slave_io_running为no:
cause:
1).网络有问题,连接不上
2).my.cnf配置文件配置出错
3)由于主从机器复制的一套mysql解压文件,所以在mysql文件夹的data目录下的auto.cnf中的server-uuid相同,报错
solve:
对于原因3可以删除从库的data目录下的auto.cnf文件然后重新运行,执行start slave;(注意删除之前进行备份,以防不测。)
question:
slave_sql_running为no[代表数据库不同步]
cause:
1).程序可能在slave上进行了写操作
2).也可能是slave机器重起后,事务回滚造成的.
solve:
1).重新按照上述的步骤来进行数据库同步
2).
强制性从某一个点开始同步,会有部分没有同步的数据丢失,后续主服务器上删除记录同步也会有一些错误信息,不会影响使用
总结
1 mysql的安装
2 mysql的数据同步
21相关准备
22主库配置
23从库配置
24主库与从库的同步
25主从复制的常见问题
1. mysql主从复制
1.1 mysql的安装
1.yum remove mysql-libs(中间过程会出现提示,输入y回车即可)shell> yum remove mysql-libs
2.安装mysql(以下的mysql-VERSION-OS代表mysql的文件名, /path/to/代表mysql文件的路径),在terminal终端中键入下列命令
shell> groupadd mysql shell> useradd -r -g mysql mysql shell> cd /usr/local shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz shell> ln -s full-path-to-mysql-VERSION-OS mysql shell> cd mysql shell> chown -R mysql . shell> chgrp -R mysql . shell> scripts/mysql_install_db --user=mysql shell> chown -R root . shell> chown -R mysql data
3.在开启mysql服务之前删除文件夹下面的my.cnf,打开new.cnf,修改里面的socket为3306,修改new.cnf的文件名为my.cnf:
port = 3306 socket = /tmp/mysql.sock
4.在终端中输入下列命令
shell> bin/mysqld_safe --user=mysql &
5.ps -ef | grep mysqld查看是否开始启动mysql客户端
shell> ps -ef | grep mysqld
6.在终端中输入下列命令
Shell> bin/mysql -uroot
进入mysql客户端输入下列命令进行mysql的root密码以及远程连接权限的修改(注意每条命令后都需要添加’;’)
mysql> use mysql; mysql> UPDATE user SET Password = PASSWORD('root') WHERE user = 'root'; mysql> FLUSH PRIVILEGES; mysql> update user set host = '%' where host ='localhost'; mysql> flush privileges; mysql> grant ALL PRIVILEGES ON *.* to root@"%" identified by "mysql" WITH GRANT OPTION;
7.关闭防火墙(也可通过命令打开指定端口,这里没有给出,因为后面需打开多个端口),在以下命令终端中输入
shell> service iptables stop
1.2 mysql的数据同步
1.2.1相关准备
主库(master): ip为192.168.1.10 port为3306从库(slave): ip为192.168.1.11 port为3306
分别按照1.1的步骤在两台机器上安装如上配置的mysql
1.2.2.主库配置
my.cnf[mysqld] log-bin=mysql-bin #打开日志(主机需要打开) server-id=1 #mysql的唯一标识 port = 3306 #端口号 socket = /tmp/mysql.sock #sock地址 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
1.2.3.从库配置
my.cnf[mysqld] log_bin=mysql-bin server-id=2 socket = /tmp/mysql.sock sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
提示:
在修改完成之后重新启动mysql使配置文件生效。
1.2.4.主库与从库的同步
1.主库锁表只读mysql>flush tables with read lock;
2.查看主库状态,并记录
mysql>show master status;
3.导出主库数据
shell> mkdir /opt/backup/ -p shell> mysqldump -uroot -p -S /tmp/mysql.sock -A -B | gzip > /opt/backup/mysql_bak.$(date +%F).sql.gz
note:注意,-A表示备份所有库, -B表示增加user DB和drop等参数(导库时会直接覆盖所有的)。
4.把主库备份的mysql数据迁移到从库
shell> scp /opt/backup/mysql_bak.2016-03-29.sql.gz root@192.168.1.11:/opt/backup/
在从库所在的系统上
shell> cd /server/backup/ && ls -l shell> gzip -d mysql_bak.2016-03-29.sql shell> mysql -uroot -p"123123" < mysql_bak.2012-05-22.sql
5.设置从属关系
登陆主库并设置数据同步的用户名和密码
shell> mysql -uroot -p mysql> select user(); 查看用户 mysql> grant replication slave on *.* to 'rep'@'192.168.1.%' identified by "123456"; 建立用于库复制的账号rep #replication slave为mysql同步的必须权限,此处不要授权all #*.*表示所有库所有表,库也是可以指定具体的库和表进行复制,如test.test1(test库的test1表); #'rep'@'192.168.1.%' rep为同步账号,192.168.1.%为授权主机,使用了%表示允许整个192.168.1.0网段以rep用户访问; #identified by "123456" , 123456为密码
登陆从库并开启主从同步
shell> mysql -uroot -p mysql> CHANGE MASTER TO 连接主数据库 MASTER_HOST="192.168.1.10", 这里是主库的ip MASTER_PORT=3306, 这里是主库的端口,从库的端口可以和主库不同 MASTER_USER="rep", 这里是主库上建立的用于复制的用户rep MASTER_PASSWORD="123456", 这里是rep的密码 MASTER_LOG_FILE="mysql-bin.000003", 这里是show master status时查看到的二进制日志文件名称,注意不能多空格 MASTER_LOG_POS=1889; 这里是show master status时查看到的二进制日志偏移量,注意不能多空格。 mysql> start slave; 开启从属服务 mysql> show slave status; 查看从属服务状态
note:
只有当slave_io_running以及slave_sql_running都是yes的状态时,部署成功
6.主库解锁
mysql>unlock tables;
1.2.5.主从复制的常见问题
question:slave_io_running为no:
cause:
1).网络有问题,连接不上
2).my.cnf配置文件配置出错
3)由于主从机器复制的一套mysql解压文件,所以在mysql文件夹的data目录下的auto.cnf中的server-uuid相同,报错
solve:
对于原因3可以删除从库的data目录下的auto.cnf文件然后重新运行,执行start slave;(注意删除之前进行备份,以防不测。)
question:
slave_sql_running为no[代表数据库不同步]
cause:
1).程序可能在slave上进行了写操作
2).也可能是slave机器重起后,事务回滚造成的.
solve:
1).重新按照上述的步骤来进行数据库同步
2).
mysql> slave stop; mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mysql> slave start;
强制性从某一个点开始同步,会有部分没有同步的数据丢失,后续主服务器上删除记录同步也会有一些错误信息,不会影响使用
总结
其实最根本的解决方法是善于利用mysql记录的日志,来详细的分析出错原因。 日志的位置在/mycat/data/localhost.err
相关文章推荐
- mysql索引失效的几种情况
- MySQL数据库的数据类型timestamp的自动更新
- Mysql安装与启动
- mysql数据库隔离级别详解
- 理解Mysql prepare预处理语句
- MySQL使用游标批量处理进行表操作
- 窥探mysql存储过程细节
- Mysql 高负载排查思路
- MySQL数据库引擎、事务、锁
- MySQL数据库的基本操作
- mysql行转列的运用
- 跟我一起学习mysql技术内幕(第五版)吧!(学习日志)
- XtraBackup出现 Can't connect to local MySQL server through socket '/tmp/mysql.sock'
- Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)
- mysql按ID排序(转)
- MySQL系列:用户及权限管理
- MySQL的create table as 与 like区别(转)
- 【mysql】数据库定时备份、数据恢复
- mysql中update select的值
- mysql 转发自 WhyWin