高可用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
- 高可用MYSQL学习之路(一)——环境搭建&mysql复制
- MySQL主从复制(一)环境搭建
- mysql+keepalived高可用集群环境搭建
- MYSQL高可用之复制(MASTER/SLAVE)
- 学习笔记5:mysql高可用(主从复制监控)
- 高可用MySQL搭建
- MySQL高可用之MHA的搭建
- 一步一步mysql(高可用复制)
- mysql高可用之PXC(Percona XtraDB Cluster)搭建
- 基于MySQL 5.7多源复制+Keepalived搭建高可用
- Mysql-MHA高可用实验测试-主从复制搭建
- MySQL 高可用:主从复制
- MySQL高可用:主从复制
- MySQL高可用系列之MHA(一)
- MySQL高可用架构之MHA(一)
- MySQL 高可用:主主复制(双主复制)
- mysql 复制 总结(一) 基本概念以及环境搭建
- 利用MySQL Cluster 7.0 + LVS 搭建高可用环境
- C++类对象内存模型与成员函数调用分析(上)
- ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
- zoj 1041 水题
- canvas的画文字方法参数的意义?
- php apache : Fatal error: Call to undefined function mysql_connect()
- 高可用MYSQL学习之路(一)——环境搭建&mysql复制
- 编写高校的Android代码
- 使用VS2010开发ActiveX(MFC)控件(3)——添加接口及WEB调用
- poj 2654 Rock-Paper-Scissors Tournament
- 【C++ STL学习之四】容器list深入学习
- Error: Bad login user
- 利用java的反射以及在java web反射机制的使用优化程序
- C++primer plus第六版课后编程题答案16.9
- java版的渊子赛马