我的操作系统: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 $mysqlvercmake . -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.cnfsed -e '/\[client\]/a\default_character_set=utf8' -e '/\[mysqld\]/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/null 2>&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 identified by '123456' ;
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;加锁;接下来按照以上操作就可以了。