高可用MYSQL学习之路(一)——环境搭建&mysql复制

来源:互联网 发布:ppt是什么软件 编辑:程序博客网 时间:2024/06/07 09:06
我的wp个人博客

1.资源概述

由于实验室机器太少,手上只有一个服务器和自己的小笔记本,一直想玩玩这种感觉高大上的mysql集群,今天终于下定决心进行。
在这里,我遇到了两个问题,先给大家阐述一下,希望能帮助大家
  • 一台机器里面如何装多个mysql
  • 为复制而创建的用户不能本地登录
下面围绕这两个问题进行解决。

2.如何在一台机器里面安装多个mysql

显然这个是开多个mysql的实例,只是对应着不同的端口就可以轻松达成。
下面讲讲我的做法。
1. 下载mysql源码,我这里下载的是mysql5.5.32的
2. 使用牛叉的cmake、make、make install进行安装
安装第一个实例mysql1
首先cmake
cmake \-DCMAKE_INSTALL_PREFIX=/data/mysql1 \   #安装路径-DMYSQL_DATADIR=/data/mysql1/data       \    #数据文件存放位置-DSYSCONFDIR=/etc              \                                  #my.cnf路径-DWITH_MYISAM_STORAGE_ENGINE=1    \       #支持MyIASM引擎-DWITH_INNOBASE_STORAGE_ENGINE=1 \     #支持InnoDB引擎-DWITH_MEMORY_STORAGE_ENGINE=1 \        #支持Memory引擎-DWITH_READLINE=1                    \                         #快捷键功能(我没用过)-DMYSQL_UNIX_ADDR=/data/mysql1/mysql1.sock      \   #连接数据库socket路径-DMYSQL_TCP_PORT=3306                  \               #端口-DENABLED_LOCAL_INFILE=1            \                #允许从本地导入数据-DWITH_PARTITION_STORAGE_ENGINE=1  \   #安装支持数据库分区-DEXTRA_CHARSETS=all                  \                   #安装所有的字符集-DDEFAULT_CHARSET=utf8              \                   #默认字符-DDEFAULT_COLLATION=utf8_general_ci
执行完毕之后我们然后make & make install
这样我们的mysql就安装好了。
然后我们需要做的事情就是为这个实例写一个配置文件
3. 为我们的这个实例搞一个配置文件
配置文件这个东西其实mysql都准备好了的,我们只需要拿出来改一改,进入到我们的安装目录/data/mysql1,将support-file文件夹下的my-medium.cnf作为我们的配置文件吧,
我将my-medium.cnf拷贝到了/data/mysql1目录下,并重命名为my.cnf,命令如下
cp my-medium.cnf ../my.cnf
打开我们的my.cnf,我们主要是需要改如下几个地方
[client]#password       = your_passwordport            = 3308socket          = /data/mysql1/mysql1.sock# Here follows entries for some specific programs# The MySQL server[mysqld]port            = 3308socket          = /data/mysql1/mysql1.sockskip-external-lockingkey_buffer_size = 16Mmax_allowed_packet = 1Mtable_open_cache = 64sort_buffer_size = 512Knet_buffer_length = 8Kread_buffer_size = 256Kread_rnd_buffer_size = 512Kmyisam_sort_buffer_size = 8M# Don't listen on a TCP/IP port at all. This can be a security enhancement,# if all processes that need to connect to mysqld run on the same host.# All interaction with mysqld must be made via Unix sockets or named pipes.# Note that using this option without enabling named pipes on Windows# (via the "enable-named-pipe" option) will render mysqld useless!##skip-networking# Replication Master Server (default)# binary logging is required for replicationlog-bin=mysql1-bin# binary logging format - mixed recommendedbinlog_format=mixed# required unique id between 1 and 2^32 - 1# defaults to 1 if master-host is not set# but will not function as a master if omittedserver-id       = 2

port不用说了,这个肯定是为每一个mysql确定一个端口,socket这个是指每个mysql实例需要用的sock文件,server-id这个是全局统一的id号,不可以出现重复的,这三个地方是需要注意的。
4. 配置文件更改完毕之后,我们对mysql这个实例进行初始化
进入到scripts文件夹下,运行下面的命令
./mysql_install_db --defaults-file=/data/mysql1/my.cnf --basedir=/data/mysql1 --datadir=/data/mysql1/data --user=mysql

--defaults-file是指我们刚刚修改的配置文件,注意这里必须要用绝对路径,用相对路径就是个坑,坑爆了。
--basedir是指我们的这个实例所在的安装目录。
--datadir是指我们这个实例以后放数据的文件夹
5.这个脚本执行成功之后,我们进入到其bin的文件夹下准备启动它
执行以下命令
./mysqld_safe --defaults-file=/data/mysql1/my.cnf
一般的情况下,我们不出意外就可以启动它了
6.设置root的密码和远程访问的权限
./mysqladmin -P 3308 -S /data/mysql1/mysql1.sock -u root password
由于我们是多个实例,所以我们需要随时指定-P端口 -S sock文件
为了方便,我自己写了两个小脚本进行处理,入参如下
第一个脚本runSQL.sh,主要是进行关闭和启动mysql的
第一个参数是实例编号,像上面我们在/data/mysql1所以编号是1;
第二个参数是命令,shutdown和start,分别控制启动和关闭
第三个参数是端口号
以上三个参数都需要加上
dir='/data/mysql';para=$1;port=$3;#echo $para;sqlBasedir=$dir$para;sqlDatadir=$sqlBasedir'/data';sqlRundir=$sqlBasedir'/bin';sqlConfigdir=$sqlBasedir'/my.cnf';sqlRunSock=$sqlBasedir'/mysql'$para'.sock';echo $2;echo $sqlRundir;cmd="start";if [ "$cmd"x = "$2"x ];then  echo 'start';  $sqlRundir/mysqld_safe --defaults-file=$sqlConfigdir --user=mysql&  echo 'ok';#echo $sqlBasedir;#echo $sqlDatadir;else  echo 'shutdown';  $sqlRundir/mysqladmin -P $port -S $sqlRunSock -uroot -p shutdown;fi

第二个脚本是enterSQL.sh,主要是通过root账号进入到mysql控制台
第一个参数是实例编号,意义同上一个脚本
第二个参数是端口号
dir='/data/mysql';para=$1;port=$2;#echo $para;sqlBasedir=$dir$para;sqlDatadir=$sqlBasedir'/data';sqlRundir=$sqlBasedir'/bin';sqlConfigdir=$sqlBasedir'/my.cnf';sqlRunSock=$sqlBasedir'/mysql'$para'.sock';$sqlRundir/mysql -P $port -S $sqlRunSock -uroot -p ;

这下我们安装好了一个区别于一般情况的mysql实例了。
下面只需要重复上面的步骤,分别把上面my.cnf中的红色的地方换掉就可以了。

3.新建的用户不能本地登录

一开始我为主从复制创建了一个新的用户,结果我发现,新创建的用户是不能本地登录的!以至于我的slave总是连接不上master而不能进行复制操作。
参考下文
mysql新建用户无法登陆解决办法

4.来做我们的主从复制吧~

· 在master上创建一个复制账号并且授权
create user repl_user;grant replication slave on *.* to repl_user@'%' identified by '123456';

然后在slave上进行如下配置
change master to master_host='localhost' master_port=3309 master_user='repl_user' master_password='123456'
因为是在一台机器上所以host就是localhost,我选取的是一个端口为3309的mysql实例。
执行完这句之后,然后执行
start slave

这样大功告成。
有问题欢迎交流~
0 0
原创粉丝点击