一聚教程网:一个值得你收藏的教程网站

热门教程

centos6.5下mysql-5.6.19数据库安装、优化、互为主从 mysql集群 高可用

时间:2022-06-30 21:04:03 编辑:袖梨 来源:一聚教程网

mysql互为主从环境介绍:

系统:centos6.5_64_mini
mysql版本:mysql-5.6.19
实验节点如下:

节点一:192.168.100.21
节点二:192.168.100.22
 
第一部分安装需要用到的库并删除自带mysql (节点一和二)

#  yum -y install gcc gcc-c++ ncurses ncurses-devel openssl openssl-devel cmake perl lsof wget bison
#  rpm -qa|grep mysql
#  rpm -e --allmatches --nodeps mysql-libs-5.1.71-1.el6.x86_64
 
第二部分MYSQL的安装(节点一和二)

1:创建MySQL数据库存放目录、配置用户和用户组
#  /usr/sbin/groupadd mysql
#  /usr/sbin/useradd -s /sbin/nologin -M -g mysql mysql
#  mkdir -p /yunwei8/mysql/data/
#  chown -R mysql:mysql /yunwei8/mysql/
 
2:创建软件下载目录,把所需软件下载

#  mkdir /yunwei8/soft
#  cd /yunwei8/soft
#  wget http://down.yunwei8.com/soft/linux/mysql-5.6.19.tar.gz
#  wget http://down.yunwei8.com/soft/linux/libunwind-1.1.tar.gz
#  wget http://down.yunwei8.com/soft/linux/gperftools-2.2.tar.gz
 
3:安装mysql-5.6.19

#  tar zxvf mysql-5.6.19.tar.gz
#  cd mysql-5.6.19
#  cmake -DCMAKE_INSTALL_PREFIX=/yunwei8/server/mysql -DMYSQL_DATADIR=/yunwei8/mysql/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DSYSCONFDIR=/etc/ -DWITH_SSL=yes -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_READLINE=on
#  make
#  make install
#  chmod +w /yunwei8/server/mysql
#  chown -R mysql:mysql /yunwei8/server/mysql/
 
4:创建软连接

#  ln -s /yunwei8/server/mysql/lib/lib* /usr/lib/
 
5:创建my.cnf配置文件,并修改:

设置Mysql
#  cp /yunwei8/server/mysql/support-files/my-default.cnf /etc/my.cnf
#  vi /etc/my.cnf
 
在[mysqld]下添如下行
character-set-server = utf8
default-storage-engine = MyISAM
basedir = /yunwei8/server/mysql
datadir = /yunwei8/mysql/data
log-error = /yunwei8/mysql/mysql_error.log
pid-file = /yunwei8/mysql/mysql.pid
max_allowed_packet = 32M
explicit_defaults_for_timestamp = true
 
6:以mysql用户帐号的身份建立数据表:

#  /yunwei8/server/mysql/scripts/mysql_install_db --basedir=/yunwei8/server/mysql --datadir=/yunwei8/mysql/data --user=mysql
 
7:设置mysql开机自动启动服务

#  cp /yunwei8/server/mysql/support-files/mysql.server /etc/init.d/mysqld
#  chkconfig --add mysqld
#  chkconfig --level 345 mysqld on
 
8:修改服务配置文件

#  vi /etc/init.d/mysqld
 
根据设定需要,修改mysqld文件中的下面两项
basedir=/yunwei8/server/mysql
datadir=/yunwei8/mysql/data
 
9:启动mysqld服务

#  service mysqld start
 
10:通过命令行登录管理MySQL服务器并设置root密码(提示输入密码时直接回车):(节点一和二)
#  /yunwei8/server/mysql/bin/mysql -u root -p -S /tmp/mysql.sock
#  mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('000000');
 
退出mysql
#  mysql> exit
 
11:软连接mysql
#  ln -s /yunwei8/server/mysql/bin/mysql /usr/bin
 
12:尝试用root连接mysql
#  mysql -u root -p
 
成功登录后查看状态
#  mysql> status;
 
第三部分:mysql优化(节点一和二)

为MySQL添加TCMalloc库的安装步骤(Linux环境):
1:64位操作系统请先安装libunwind库,32位操作系统不要安装。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。
首先安装libunwind-1.1

#  cd /yunwei8/soft
#  tar zxvf libunwind-1.1.tar.gz
#  cd libunwind-1.1
#  CFLAGS=-fPIC ./configure
#  make CFLAGS=-fPIC
#  make CFLAGS=-fPIC install
 
2:安装google-perftools:

#  cd /yunwei8/soft
#  tar zxvf gperftools-2.2.tar.gz
#  cd gperftools-2.2/
#  ./configure
#  make && make install
#  echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
#  /sbin/ldconfig
 
3:修改MySQL启动脚本(根据你的MySQL安装位置而定)

#  vi /yunwei8/server/mysql/bin/mysqld_safe
 
在# executing mysqld_safe的下一行,加上:
export LD_PRELOAD=/usr/local/lib/libtcmalloc.so
 
保存后退出,然后重启MySQL服务器。
#  service mysqld restart
 
4:使用lsof命令查看tcmalloc是否起效:
#  /usr/sbin/lsof -n | grep tcmalloc
 
如果发现以下信息,说明tcmalloc已经起效:
mysqld    11227 mysql  mem       REG                8,1  2171746      18287 /usr/local/lib/libtcmalloc.so.4.1.2
 
第四部分:mysql互为主从配置
第一步防火墙设置(节点一和二)
端口开放
#  /sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
 
然后保存:
#  /etc/rc.d/init.d/iptables save
 
第二步配置mysql互为主从
1:登录mysql数据库(节点一和二)
#  mysql-u root -p
 
2:建立需要同步的数据库(节点一和二)
#  mysql> create database yunwei8;
 
3:添加一个远程用户,名为yunwei8密码为123456,并且只能对yunwei8数据库有权限(节点一和二)
#  mysql> GRANT ALL PRIVILEGES ON yunwei8.* TO yunwei8@"%" IDENTIFIED BY '123456';
 
4:修改/etc/my.cnf文件(节点一)
#  rm -rf /etc/my.cnf
#  vi /etc/my.cnf
添加如下配置代码
[client]
default-character-set = utf8
port            = 3306
socket          = /tmp/mysql.sock

[mysqld]
character-set-server = utf8
default-storage-engine = MyISAM
basedir = /yunwei8/server/mysql
datadir = /yunwei8/mysql/data
log-error = /yunwei8/mysql/mysql_error.log
pid-file = /yunwei8/mysql/mysql.pid
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 32M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
thread_concurrency = 8
log-bin=mysql-bin
server-id = 1
binlog-do-db=yunwei8
replicate-do-db=yunwei8
binlog-ignore-db=mysql
replicate-ignore-db=mysql
sync_binlog=1
auto_increment_increment = 2
auto_increment_offset = 1
log-slave-updates
slave-skip-errors=all
[mysqldump]
quick
max_allowed_packet = 32M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
 
5:修改/etc/my.cnf文件(节点二)
#  rm -rf /etc/my.cnf
#  vi /etc/my.cnf
添加如下配置代码
[client]
default-character-set = utf8
port            = 3306
socket          = /tmp/mysql.sock
[mysqld]
character-set-server = utf8
default-storage-engine = MyISAM
basedir = /yunwei8/server/mysql
datadir = /yunwei8/mysql/data
log-error = /yunwei8/mysql/mysql_error.log
pid-file = /yunwei8/mysql/mysql.pid
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 32M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
thread_concurrency = 8
log-bin=mysql-bin
server-id       = 2
binlog-do-db=yunwei8
replicate-do-db=yunwei8
binlog-ignore-db=mysql
replicate-ignore-db=mysql
sync_binlog=1
auto_increment_offset = 2
auto_increment_increment = 2
log-slave-updates
slave-skip-errors=all

[mysqldump]
quick
max_allowed_packet = 32M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
 
6:重启两台服务器的mysql(节点一和二)
#  service mysqld restart
 
7:给两个节点授权同步账户, 赋予REPLICATION SLAVE权限(节点一和二)
#  mysql -u root -p
#  mysql> GRANT REPLICATION SLAVE ON *.* to 'abc'@'%' identified by 'abc';
 为abc用户赋予任何数据库中任何表上的REPLICATION SLAVE权限, 此用户可以在网络任意位置访问, 访问时以密码abc标记
 
8:开启一个权限跟ROOT一样的远程账户用于后期脚本监控(节点一和二)
#  GRANT ALL PRIVILEGES ON *.* TO admin@"%" IDENTIFIED BY '123456';
 
9:锁表(锁表状态下不能退出SSH,否则会失败,使用SSH可以另外克隆一个)(节点一和二)
#  mysql -u root -p
#  mysql> FLUSH TABLES WITH READ LOCK;
 
10:查看节点一状态(记录二进制开始文件,位置)
#  mysql> show master status;
显示:
#  mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |     1051 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
 
11:查看节点二状态(记录二进制开始文件,位置)
#  mysql> show master status;
显示:
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      764 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
 
12:节点一连接节点二
#  mysql> CHANGE MASTER TO MASTER_HOST='192.168.100.22',MASTER_USER='abc', MASTER_PASSWORD='abc',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=764;
 
12.1:开启节点一同步进程
#  mysql> START SLAVE;
 
12.2:查看节点一同步状态是否正常
#  mysql> SHOW SLAVE STATUSG;
 
 *************************** 1. row ***************************
……………………(省略部分)
Slave_IO_Running: Yes  //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
……………………(省略部分)
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

13:节点二连接节点一
#  mysql> CHANGE MASTER TO MASTER_HOST='192.168.100.21',MASTER_USER='abc', MASTER_PASSWORD='abc',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=1051;
 
13.1开启节点二同步进程
#  mysql> START SLAVE;
 
13.2查看节点二同步状态是否正常
#  mysql> SHOW SLAVE STATUSG;
 
 *************************** 1. row ***************************
……………………(省略部分)
Slave_IO_Running: Yes  //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
……………………(省略部分)
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

14:解锁节点一和节点二
#  mysql> UNLOCK TABLES;

15:退出节点一和节点二的mysql,至此mysql的互为主从已经实现了
#  mysql> exit;
 
 
第五部分:mysql配置文件详解
[client]
#设置mysql客户端默认字符集
default-character-set = utf8
 
#指定默认端口
port  = 3306
 
#是个UNIX域socket文件,这种socket效率比基于TCP/IP的socket高,但是缺点是不能跨机器连接,mysql提供这个东西是为了改善本地连接的速度
socket  = /tmp/mysql.sock

[mysqld]
#服务端使用的字符集
character-set-server = utf8
 
#创建新表时将使用的默认存储引擎
default-storage-engine = MyISAM
 
#基准路径,其他路径都相对于这个路径
basedir = /yunwi8/server/mysql
 
# mysql数据库文件所在目录
datadir = /yunwei8/mysql/data
 
#错误日志存放路径
log-error = /yunwei8/mysql/mysql_error.log
 
#进程存放位置
pid-file = /yunwei8/mysql/mysql.pid
port  = 3306
socket  = /tmp/mysql.sock
 
#不使用系统锁定,要使用myisamchk,必须关闭服务器
skip-external-locking
 
#myisam索引buffer,只有key没有data
key_buffer_size = 384M
 
#增长到max_allowed_packet字节
max_allowed_packet = 32M
 
#主要用于设置table高速缓存的数量
table_open_cache = 512
 
#排序buffer大小;线程级别
sort_buffer_size = 2M
 
#以全表扫描(Sequential Scan)方式扫描数据的buffer大小 ;线程级别
read_buffer_size = 2M
 
#MyISAM以索引扫描(Random Scan)方式扫描数据的buffer大小 ;线程级别
read_rnd_buffer_size = 8M
 
#MyISAM 设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区
myisam_sort_buffer_size = 64M
 
#线程缓存
thread_cache_size = 8
 
#查询缓存大小
query_cache_size = 32M
 
#同时运行的线程的数据 此处最好为CPU个数两倍。本机配置为CPU的个数
thread_concurrency = 8
 
#以下为互为主从配置选项
#启用二进制日志
log-bin=mysql-bin
 
#表示是本机的序号为1,一般来讲就是master的意思。
server-id = 1
 
#要记录日志的数据库,如果需要多个重复设置这个选项即可
binlog-do-db=yunwei8
 
#需要复制的数据库名,如果需要多个数据库,重复设置这个选项即可
replicate-do-db=yunwei8
 
#不要记录日志的数据库名,如果需要多个重复设置这个选项即可
binlog-ignore-db=mysql
 
#不需要复制的数据库名,如果需要多个数据库,重复设置这个选项即可
replicate-ignore-db=mysql
 
#默认情况下,并不是每次写入时都将binlog与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能binlog中最后的语句丢失了。要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使binlog在每N次binlog写入后与硬盘同步。
sync_binlog=1
 
#字段一次递增多少
auto_increment_increment = 2
 
#自增字段的起始值,这样A的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID
auto_increment_offset = 1
 
#表示如果一个MASTER挂掉的话,另外一个马上接管;一定要加上,否则不会把更新的记录写到二进制文件里
log-slave-updates
 
#跳过错误,继续执行复制操作
slave-skip-errors=all
[mysqldump]
quick
max_allowed_packet = 32M

[mysql]
#这个配置段设置启动MySQL服务的条件;在这种情况下,no-auto-rehash确保这个服务启动得比较快。
no-auto-rehash

热门栏目