一步一步搭建mysql主从同步

来源:互联网 发布:安卓软件商城 编辑:程序博客网 时间:2024/06/04 18:01

下载mysql数据库

$ wget http://cdn.mysql.com/Downloads/MySQL-5.1/mysql-5.1.73.tar.gztar vzxf mysql-5.1.73.tar.gz

编译安装

     最好专门创建一个用户mysql来安装数据库。
MYSQL_BASEDIR=$HOME/mysqlcd mysql-5.1.73./configure --prefix=${MYSQL_BASEDIR} --with-charset=gbk --with-extra-charsets=gbk,utf8,ascii,big5,latin1,binary --with-unix-socket-path=${MYSQL_BASEDIR}/tmp/mysql.sock --with-mysqld-user=mysql     #以哪个用户执行mysqld进程makemake install

初始化数据库

复制必要的配置文件和启停脚本
cd ${MYSQL_BASEDIR}mkdir etc log tmp varcp share/mysql/my-medium.cnf  my.cnfcp share/mysql/mysql.server  bin/

修改配置文件

vim ./my.cnf

在[mysqld]下添加配置项:
basedir= ${MYSQL_BASEDIR}   # ${MYSQL_BASEDIR}是你的mysql安装目录datadir = ${MYSQL_BASEDIR}/var   # mysql数据路径tmpdir = ${MYSQL_BASEDIR}/tmp   # 临时文件路径slave-load-tmpdir = ${MYSQL_BASEDIR}/tmp   # 从服务器同步LOAD DATA INFILE语句时创建临时文件的目录名port = 3306   # 如果修改port,[mysqld] 和 [client]下的port都要修改pid-file = ${MYSQL_BASEDIR}/var/mysql.pid  # mysqld PID文件位置#以下为可选socket = ${MYSQL_BASEDIR}/tmp/mysql.sock  # 用于指定本地连接的Unix套接字文件位置,[mysqld] 和 [client]下的port都要修改#skip-name-resolve   # 是否仅使用ip验证客户端#skip-symbolic-links  #忽略MyISAM表的数据及索引文件连接到另一个目录下max_connect_errors = 10000max_connections = 500wait-timeout = 30

启动数据库
$ ./bin/mysql_install_db  #安装数据库文件$ ./bin/mysql.server start    #出现下面这行说数据库启动ok了Starting MySQL.                                            [  OK  ]

配置mysql用户

使用./bin目录下的mysql命令可以登录到数据库,登录后删除匿名用户并且为root设置密码:
$ mysql -u root> delete from mysql.user where user='';> UPDATE mysql.user SET Password = PASSWORD('password') WHERE user='root';

按照以上同样的步骤再搭建一个mysql,注意,如果在同一主机搭建多个mysql实例,那么就需要将端口改成不同才行。
下面开始配置主从同步。

首先在主库新建专门用于同步的数据库账号mysqlsync
> GRANT REPLICATION SLAVE ON *.* TO 'mysqlsync'@'%' IDENTIFIED BY 'password';

主库配置

   所有的配置项还是在my.cnf中的[mysqld]下添加。
首先server-id作为MySQL服务器的标识,具有相关联上下游同步系统需具有全局唯一性。主库我们将server-id配置为1。其他主库需要添加的配置有:
server-id=1# 同步过程中需要忽略的表,支持正则表达式。全库同步时,必须屏蔽mysql系统库和test测试库。replicate-wild-ignore-table = mysql.%replicate-wild-ignore-table = test.%# 需要同步的表,多个表需多次指定,这里我们使用全库同步,方便点# replicate-do-table = database.tablelog-bin = mysql-bin  #二进制日志,强制开启log-bin-index = mysql-bin.index  # 记录二进制日志索引文件relay-log-index = relay-log.index # 记录中继日志索引文件

从库配置

server-id=2read-only # 在从库开启该选项,避免在从库上进行写操作,导致主从数据不一致(不过对super权限无效哦)skip-slave-start # 在从库开启该选项,启动数据库后,需手动开启同步进程relay-log = mysql-relay #中继日志,从库开启relay-log-index = relay-log.indexlog-bin = mysql-binlog-bin-index = mysql-bin.indexreplicate-wild-ignore-table = mysql.%replicate-wild-ignore-table = test.%

同步设置

   启动主数据库,并查看主库状态:
$ ./bin/mysql.server start$ mysql -u root -pmysql> show master status;


 记下来log文件名和位置,这里是“mysql-bin.000005"和”106“。
然后启动从库,
$ ./bin/mysql.server start$ mysql -u root -pmysql> change master to master_host='your_host',master_port=3307,master_user='mysqlsync',master_password='pasword',master_log_file='mysql-bin.000005',master_log_pos=106;mysql> startslave;  #启动从库mysql> show slave status\G;
最后一条sql命令得到如图结果:

 其中Slave_IO_Running和Slave_SQL_Running是yes就对了。
  最后,可以验证一下,在主库修改记录,从库可以看到同步过来的变化。

0 0
原创粉丝点击