设为首页 收藏本站
查看: 1900|回复: 0

[经验分享] Mysql 5.6 双主互备高可用(Keepalived+mysql) (一)

[复制链接]

尚未签到

发表于 2015-11-20 09:04:46 | 显示全部楼层 |阅读模式
  安装环境:Redhat 5.8
  mysql版本:mysql-5.6.25
  DB机器A(主):192.168.8.193 主机名:mysql01

  DB机器B:192.168.8.194 主机名:mysql02
  mysql VIP(IP) :192.168.8.198
  ---------------------------------------------------------------------------------------------------------------------
  分别设置两台服务器的hosts解析:
  找到/etc/hosts文件并编辑添加以下内容:
  192.168.8.193      mysql01

  192.168.8.194      mysql02

  ----------------------------------------------------------------------------------------------------------------------
  mysql 5.5 版本以后,开始使用cmake编译工具,所以在安装源文件中已经没有configure文件。
  我们首先安装相应的依赖包,包括一些编译需要用到的工具:
  yum -y install cmake gcc gcc-c++ ncurses-devel bison libaio-devel libnl* libpopt* popt-static openssl-devel
  ------------------------------------------------------------------------------------------------------------------------
  增加mysql用户

  groupadd mysql  

  useradd mysql -g mysql -M -s /sbin/nologin

  mkdir /usr/local/mysql

  mkdir /usr/local/mysql/data
  
-g:指定新用户所属的用户组
  -M:不建立用户目录
  -s:/sbin/nologin代表用户不能登录系统
  --------------------------------------------------------------------------------------------------------------------------

  进入opt目录解压安装包:

  tar -zxvf mysql-5.6.25.tar.gz

  编译安装:
  cd mysql-5.6.25 进入解压后的目录执行:
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 -DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 -DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \
-DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_SSL:STRING=bundled
  
  
  说明:
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql        //安装目录
  -DINSTALL_DATADIR=/usr/local/mysql/data         //数据库存放目录
  ---------------------------------------------------------------------------------------------------------------------------
  然后再执行安装命令:

  make && make install
  # make是用来编译的,它从Makefile中读取指令,然后编译。
# make install是用来安装的,它也从Makefile中读取指令,将软件安装到指定的位置。

  ---------------------------------------------------------------------------------------------------------------------------

  执行完没有报错后我们再将mysql的配置文件拷贝到 /etc/mysql 目录下:
  mkdir    /etc/mysql    #  新建mysql目录

  cp  /opt/mysql-5.6.25/support-files/my-default.cnf     /etc/mysql/my.cnf

  Mysql在启动实例的时候会读取配置文件,如果它找不到配置文件则会按照默认参数设置启动实例,
  这里我们可以通过help命令查看到它的几个默认加载路径:
  /usr/local/mysql/bin/mysql --help | grep my.cnf
  order of preference, my.cnf, $MYSQL_TCP_PORT,
  /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
  Mysql 会以读取到最后一个配置文件中的参数为准
  -----------------------------------------------------------------------------------------------------------------------------

  完成后,我们进入到 /usr/local/mysql 目录下,进行一些安全设置:
chown -R mysql:mysql data                  #将data目录的权限赋给mysql用户
  chmod -R 700 /usr/local/mysql/data    #将data目录的权限设置为只有属主有读、写、执行权限
  -----------------------------------------------------------------------------------------------------------------------------
  然后将mysql作为系统服务,加入开机启动项:
  cp /opt/mysql-5.6.25/support-files/mysql.server     /etc/init.d/mysqld
  chmod 755 mysqld     # 需要执行权限

  chkconfig --add mysqld

  输入 chkconfig --list mysqld 查看结果是否如下:
  mysql.server    0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
  chkconfig  mysqld on  #  设置开机启动
  -----------------------------------------------------------------------------------------------------------------------------
  然后配置 mysql 的环境变量,执行如下命令:
  echo  export  MYSQL_HOME=/usr/local/mysql  >>  /etc/profile
  echo  'PATH=$PATH:$HOME/bin:$MYSQL_HOME/bin'   >>  /etc/profile

  source /etc/profile
  ---------------------------------------------------------------------------------------------------------------------------
  修改DB机器A  mysql 配置文件:
  vi  /etc/mysql/my.cnf

  [mysqld]
  port = 3306

  socket = /tmp/mysql.sock
  basedir = /usr/local/mysql

  datadir = /data/mysql

  pid-file = /data/mysql/mysql.pid

  user = mysql

  bind-address = 0.0.0.0

  skip-locking

  skip-name-resolve

  back_log = 384

  key_buffer_size = 256M

  max_allowed_packet = 4M

  thread_stack = 256K

  table_cache = 128K

  sort_buffer_size = 6M

  read_buffer_size = 4M

  join_buffer_size = 8M

  myisam_sort_buffer_size = 64M

  table_cache = 512

  thread_cache_size = 64

  query_cache_size = 64M

  tmp_table_size = 256M

  max_connections = 768

  max_connect_errors = 10000000

  wait_timeout = 10

  thread_concurrency = 8

  skip-networking
  # 以上为基本设置,请根据自己的使用场景进行优化,但请确保有以下内容

  server-id=1                             #节点标识号

  log-bin=/usr/local/mysql/log/bin-log            #定义二进制bin日志路径

  relay-log=/usr/local/mysql/log/relay-log      #定义中继日志relaylog

  log-slave-updates = ON                                 #中继日志执行之后,这些变化是否需要记入自己的binarylog

  replicate-wild-ignore-table = mysql.%         #复制过滤选项

  replicate-wild-ignore-table = test.%

  replicate-wild-ignore-table = information_schema.%

  replicate-wild-ignore-table = performance_schema.%
  #DB A 配置配置至此结束

  -----------------------------------------------------------------------------------------

  
  修改DB机器B  mysql 配置文件:
  vi  /etc/mysql/my.cnf

  [mysqld]
  port = 3306

  socket = /tmp/mysql.sock
  basedir = /usr/local/mysql

  datadir = /data/mysql

  pid-file = /data/mysql/mysql.pid

  user = mysql

  bind-address = 0.0.0.0

  skip-locking

  skip-name-resolve

  back_log = 384

  key_buffer_size = 256M

  max_allowed_packet = 4M

  thread_stack = 256K

  table_cache = 128K

  sort_buffer_size = 6M

  read_buffer_size = 4M

  join_buffer_size = 8M

  myisam_sort_buffer_size = 64M

  table_cache = 512

  thread_cache_size = 64

  query_cache_size = 64M

  tmp_table_size = 256M

  max_connections = 768

  max_connect_errors = 10000000

  wait_timeout = 10

  thread_concurrency = 8

  skip-networking
[mysqld]  server-id=2  #节点标识号

  log-bin=/usr/local/mysql/log/bin-log

  relay-log=/usr/local/mysql/log/relay-log

  log-slave-updates = ON

  replicate-wild-ignore-table = mysql.%

  replicate-wild-ignore-table = test.%

  replicate-wild-ignore-table = information_schema.%

  replicate-wild-ignore-table = performance_schema.%

  auto-increment-increment=10

  auto-increment-offset=1
  DB B 配置配置至此结束

  ----------------------------------------------------------------------------------------
  
  注意:
  在主库上请勿使用以下选项

  #binlog-ignore-db = mysql

  #binlog-ignore-db = test

  #binlog-ignore-db = information_schema

  #binlog-ignore-db = performance_schema

  在从库上请勿使用以下选项

  #binlog-do-db

  #binlog-ignore-db
  ----------------------------------------------------------------------------------------------------------------------------

  mysql 安装完成后,我们需要初始化 mysql 数据库:
  /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
  启动 mysql 服务命令:
  service   mysqld  start
  -----------------------------------------------------------------------------------------------------------------------------
  
安全设置,我们需要运行 mysql_secure_installation  执行如下几个设置:
  为root用户设置密码,删除匿名账号,取消root用户远程登录,删除test库和对test库的访问权限,刷新授权表使修改生效
  /usr/local/mysql/bin/mysql_secure_installation
  NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):     回车键
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] y     是否设置 root 用户密码
New password:                       设置并输入 root 密码
Re-enter new password:        再一次输入
Password updated successfully!
Reloading privilege tables..
... Success!


By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y        删除匿名用户
... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n       是否允许 root 用户远程登陆
... skipping.

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y       是否删除 test 测试数据库
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y         是否重新加载权限表
... Success!




All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!


Cleaning up...
  -------------------------------------------------------------------------------------------------------------------------------------
  mysql_install_db 的附加说明:

  当我们需要初始化mysql数据库时,或者需要在本机新加一个新的实例时,这个命令对我们很有帮助:
  我们只需要将 mysql 的配置文件 my.cnf 复制一份到新的 mysql 目录下(无需安装,假设为/usrl/local/mysql_2/),
  并将端口和目录都相应的改变即可。配置完成后,运行下面命令进行数据库的初始化::
  /usr/local/mysql/bin/mysql_install_db --defaults-file=/usrl/local/mysql_2/my.cnf --datadir=/usrl/local/mysql_2/data

  -------------------------------------------------------------------------------------------------------------------------------------
  对mysql用户设置远程访问权限

  改表法:登陆mysql后,更改“mysql”数据库里的“user”表里的“host”项,将“localhost”改“%”
  mysql -u root -p

  mysql>use mysql;

  mysql>update user set host ='%' where user ='root';

  mysql>select host,user from user;
  +-----------+---------+
| host           | user |
+-----------+----------+
| %                 | root |
| 127.0.0.1   | root |
| ::1                | root |
| mysql01     | root |
+-----------+----------+

  mysql>FLUSH PRIVILEGES

  授权法:假设允许用户username通过密码password从远程连接到mysql服务器

  mysql>GRANT ALL RRIVILEGES ON *.* TO username@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

  mysql>FLUSH PRIVILEGES;

  -------------------------------------------------------------------------------------------------------------------------------------

  DB A上需要创建用于备份的用户:

  grant replication slave on *.* to 'repl_user'@'192.168.8.194' identified by 'repl_passwd';

  show master status;

  输出的内容,下面需要使用到:MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=7145;
  
  DB B上也需要创建用于备份的用户:

  grant replication slave on *.* to 'repl_user'@'192.168.8.193' identified by 'repl_passwd';

  show master status;

  输出的内容,下面需要使用到:MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=600;
  ---------------------------------------------------------
  
  在DB A 上开启同步,执行:

  CHANGE MASTER TO

  MASTER_HOST='192.168.8.194',

  MASTER_USER='repl_user',

  MASTER_PASSWORD='repl_passwd',

  MASTER_LOG_FILE='bin-log.000003',

  MASTER_LOG_POS=600;

  启动slave服务:

  mysql> start slave;

  查看slave运行状态:

  mysql> show slave status\G;

  两个都是Yes, 说明开启成功:

  Slave_IO_Running: Yes

Slave_SQL_Running: Yes
  在DB B 上开启同步,执行:

  CHANGE MASTER TO

  MASTER_HOST='192.168.8.193',

  MASTER_USER='repl_user',

  MASTER_PASSWORD='repl_passwd',

  MASTER_LOG_FILE='bin-log.000004',

  MASTER_LOG_POS=7145;

  启动slave服务:

  mysql> start slave;

  查看slave运行状态:

  mysql> show slave status\G;

  两个都是Yes, 说明开启成功:

  Slave_IO_Running: Yes

  Slave_SQL_Running: Yes

  --------------------------------------------------------------------------------------------------------------------------------------
  至此,两台mysql主主互备的安装配置部分结束!
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-141352-1-1.html 上篇帖子: Ubuntu编译安装Keepalived 下篇帖子: Nginx+Keepalived说明及环境说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表