鸦鸦 发表于 2018-9-29 11:53:02

mysql5.5主从复制

  我的操作系统:rhel6,定制安装时选择base system为默认。developmet 选择的development-tools所有可选包。
  安装mysql5.5要求安装ncurses-devel包。我的系统没有装,从光盘yum安装或者rpm安装。
  oracle新释出5.5版本要用cmake来编译源码包。所以还要安装cmake。我下载的cmake2.8,于是卸载了原系统的cmake2.6。
  编译时进入解压后的mysql目录,查看一下INSTALL-SOURCE文件,里面介绍了各种操作系统平台mysql的安装方法。不过我大略看了一下好像是没写怎么定制安装。这时我们可以打开同目录下的BUILD-CMAKE文件,里面介绍了如何使用cmake来configuration parameters。于是我们可以在当前目录下输入cmake -L;要查看带简短解释的编译属性用cmake -LH;再全一点可以用cmake -LAH。
  这里我把安装cmake和mysql的过程写入了一个脚本:
  #! /bin/bash
  cmakever=cmake-2.8.3
  mysqlver=mysql-5.5.12
  mysql_home=/usr/local/mysql
  ########################
  groupadd mysql
  useradd -g mysql -s /sbin/nologin mysql
  mkdir /opt/data
  chown -R mysql.mysql /opt/data
  mkdir /usr/local/mysql
  tar zxvf $cmakever.tar.gz
  cd $cmakever
  ./configure;make;make install
  cd -
  tar zxvf $mysqlver.tar.gz
  cd $mysqlver
  cmake . -DCMAKE_INSTALL_PREFIX=$mysql_home \
  -DINSTALL_DATADIR=/opt/data -DDEFAULT_CHARSET=utf8 \
  -DEXTAR_CHARSETS=all -DENABLED_LOCAL_INFILE=1 \
  -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_E \
  MBEDDED_SERVER=1
  make;make install
  cp -f $mysql_home/support-files/my-medium.cnf /etc/my.cnf
  sed -e '/\/a\default_character_set=utf8' -e '/\/a\character_set_server=utf8\n\datadir=/opt/data'/etc/my.cnf > /etc/my.cnf.new
  mv /etc/my.cnf /etc/my.cnf.old
  mv /etc/my.cnf.new /etc/my.cnf
  $mysql_home/scripts/mysql_install_db --datadir=/opt/data --basedir=$mysql_home\
  --user=mysql > /dev/null 2>&1
  #./bin/mysqld_safe --user=mysql & > /dev/null2>&1
  cp -f $mysql_home/support-files/mysql.server /etc/init.d/mysqld
  chmod +x /etc/init.d/mysqld
  chkconfig --add /etc/init.d/mysqld
  chkconfig --level 35 mysqld on
  echo "export PATH=$PATH:$mysql_home/bin" >> /etc/profile
  source /etc/profile
  service mysqld start
  注:两个标红的地方都是一行,其中第一个是我定制的编译选项,第二个是用sed在my.cnf中加入字符编码和数据目录。因为我在安装时自定义了数据目录。如果不编辑默认的配置文件总是在mysql_install_db那一步就出错。
  ====================================
  下面该配置主从复制了,但我看以前的一些文档甚至”原装“的my.cnf,需要在从机的配置文件中声明主机的IP,端口,赋予权限的用户,密码等信息,但新版本的好像并不支持这些选项了。比如我打开master-host="主机IP",重启mysql时错误日志提示不认识这个选项。
  干脆省事不开这些选项了,也不影响正常功能。
  我的主机:192.168.0.30
  从机:192.168.0.40
  主机操作:
  (1)可以编辑my.cnf自定义二进制日志的位置等信息。我没有改动任何选项,只是保证二进制日志选项是打开的。
  (2)登入mysql建立一个用户,并赋予replication slave权限:

  mysql>grant replication slave on *.* to slaveuser@192.168.0.40>  mysql>flush privileges;
  mysql>show master status;
  记录下二进制日志文件名和位置,如下:
  +------------------+----------+--------------+------------------+
  | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  +------------------+----------+--------------+------------------+
  | mysql-bin.000007 |      295 |            |                  |
  +------------------+----------+--------------+-------------------+
  从机操作:
  (1)编辑my.cnf,把server-id改成不和主机相同的数字。如果只想同步指定的数据库,可以添加replicate-do-db = yourdatabase,同步几个就复制几个,把数据库名改了就好。
  (2)登入mysql,输入一下命令:
  mysql>change master to master_host='192.168.0.30',master_user='slaveuser',master_password='123456',
  master_log_file='mysql-bin.000007',master_log_pos=295;
  mysql>start slave;
  mysql>show slave status\G;
  如果出现: Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  以上两项都为Yes,那说明没问题了。如果指定了个别的数据库,还可以看到:
  Replicate_Do_DB: yourdatabase。很明白的看到是同步了哪几个数据库。
  注:(1)如果出现Slave_SQL_Running:connecting的现象,首先在从机命令行下输入:
  #mysql -uslaveuser -h 192.168.0.30 -p123456
  看是否能登入mysql,如果是拒绝等提示,那要查看主机上的第(2)操作是否用户的权限等设置正确。
  (2)如果开始的环境不是主从架构,跑了一段时间已经有了数据,这时候要先在主机上加锁:flush tables with read lock;
  打包主机的数据目录: #tar zcf/tmpdatabak.tgz /opt/data,拷贝这个压缩包到从机,解压后,做主从的配置。
  然后解锁:unlock tables;
  ==============================================
  主从机制主要实现了数据库读操作的负载,可以设置多从来分担主的读操作。写还是要在主上进行,不要在从库上做增删改的操作,像我开始一样菜就麻烦了,删除了从库数据但主库不会再同步了。即使是设置了互为主从,为避免数据冲突,写还是要由其中一台主来完成。为了实现高效的数据库性能,我们可以做成读写分离。以后我测试完贴出来。也希望有实际应用的朋友们给我借鉴一下经验!
  切记:从库的作用就是读负载,以及备份的作用。当然真正的备份也还是要在主库上来做的。如果主库挂掉了,可以尝试把其中一台从库切换成主库。操作就是先然后停止slave;加锁;接下来按照以上操作就可以了。

页: [1]
查看完整版本: mysql5.5主从复制