• centos7搭建mysql-5.7.22主从复制


    mysql7.7.22主从复制

             本项目是根据真实环境搭建编写出文档,文档中的目录也是根据自己公司环境所创建。公司原来是一台服务器搭建的数据库(5.7.22),由于业务的扩展需要搭建一台从服务器,减轻主服务器的压力。两台服务器的数据库搭建方法是一样的,就是主从配置时候不一样。

    一、  系统版本及安装所需要的环境

    系统:Centos7.1两台

    Master:192.168.161.141

    Slave: 192.168.161.140

    安装开发工具,如果你源码安装软件就需要安装这个。

    yum -y groupinstall "Development Tools"

    安装依赖包

    yum -y install openssl* zlib* pcre* ncurses* make cmake vsftpd lrzsz gcc gcc-c++ gcc-g77 flex bison* autoconf automake bzip2-devel zlib-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel openssl-devel libxml2-devel gettext-devel pcre-devel net-snmp-devel curl-devel perl-DBI vixie-cron crontabs wget

    检查是否已经有安装的mysql,避免冲突。

    rpm -qa | grep mysql 

    如果系统已安装mysql,进行强制卸载。

    rpm -e –nodeps mysql-libs-5.1.73-5.el6_6.x86_64

    centos7默认安装了mariadb数据库,将其查询出来卸载掉

    rpm –qa  | grep  mariadb

    rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

    创建数据库用户组,并将用户加入mysql组。

    groupadd mysqlmaster

    useradd -g mysqlmaster -m mysqlmaster    ###mysqlmaster这个用户自己定,这边原服务器设置的是mysqlmaster。

    一、  进行安装数据库。

    下载地址:

    https://dev.mysql.com/downloads/mysql/5.7.html#downloads

    下载好后使用lrzsz工具软件上传至服务器opt目录下。###不会使用lrzsz工具的可以百度。

    解压上传的软件包,MySQL5.7.5之后需要boost库支持。

    安装ncurses-develncurses字符终端下屏幕控制的基本库,你在TTY下登录到主机上mysql需要的,所以依赖。

    yum –y install ncurses-devel

    安装cmake,编译过程检查(mysql5.6版本以上需要用cmake安装,这是必须的,其他软件也可以使用cmake安装但是使用cmake安装的前提是源码包下有没有CMakeLists.txt这个文件,有的话就可以使用cmake .)    ####yum安装依赖的时候,安装了cmake,yum安装的版本太低,百度下载一个高版本的安装。

    进行解压安装cmake。

    执行cmake脚本。

    使用gmake进行编译安装。

    删除CMakeCache.txt,不然安装mysql时报错:remove CMakeCache.txt and rerun cmake……

    使用find / -name CMakeCache.txt将CMakeCache.txt查询出来删除

    删除CMakeCache.txt

    创建mysql所需要的文件夹

    设置目录属组

    mkdir/home/mysqlmdata/    ###此目录用于存放bin-log日志

    chmod 755 –R /home/mysqlmdata/

    chown –R mysqlmaster:mysqlmaster /home/mysqlmdata/  

    chmod 755 –R /opt/mysqlmaster/mysqlm/   ####配置文件目录设置权限

    chown –R mysqlmaster:mysqlmaster /opt/mysqlmaster/mysqlm/    

    chmod 755 /home/mysqlm/data      #####此目录用于存放数据的目录。

    chown -R mysqlmaster:mysqlmaster /home/mysqlm/data

    进行预编译安装

    cmake . -DCMAKE_INSTALL_PREFIX=/opt/mysqlmaster/mysqlm -DMYSQL_UNIX_ADDR=/opt/mysqlmaster/mysqlm/mysql_3306.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/home/mysqlm/data -DMYSQL_USER=mysqlmaster -DMYSQL_TCP_PORT=3306 -DWITHOUT_PARTITION_STORAGE_ENGINE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/opt/mysql-5.7.22/boost/boost_1_59_0/ -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DWITH_READLINE=ON -DSYSCONFDIR=/opt/mysqlmaster/mysqlm -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DCOMPILATION_COMMENT='huiteng for mysqlm'

    编译安装,此步骤时间有点长。

    测试一下,如果返回不为0,则未完成。

    创建mysql配置文件my.cnf

    vim my.cnf

    (master:)

    [client]

    #password       = your_password

    port            = 3306

    socket          = /opt/mysqlmaster/mysqlm/mysql_3306.sock

    default-character-set=UTF8

    # The MySQL server

    [mysqld]

    port            = 3306

    basedir = /opt/mysqlmaster/mysqlm/

    socket          = /opt/mysqlmaster/mysqlm/mysql_3306.sock

    datadir         = /home/mysqlm/data

    log-error=/home/mysqlm/data/error.log

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

    user=mysqlmaster #此处为mysql源码安装的系统用户名

    tmpdir=/tmp

    log_timestamps = SYSTEM

    #explicit_defaults_for_timestamp=1

    skip-name-resolve

    skip-external-locking

    lower_case_table_names=1

    server_id=1

    binlog_format = row

    log_bin_trust_function_creators = 1

    log_bin    = /home/mysqlmdata/mysql-bin

    log-slave-updates

    binlog-do-db=htcoredb

    binlog-do-db=htcoretestdb

    binlog-ignore-db = mysql

    key_buffer_size = 4024M

    max_allowed_packet = 256M

    max_heap_table_size=256M

    tmp_table_size =256M

    sort_buffer_size = 128K

    read_buffer_size = 4M

    read_rnd_buffer_size = 8M

    myisam_sort_buffer_size = 64M

    thread_cache_size = 64

    query_cache_size= 64M

    user = mysqlmaster

    max_connections=214

    max_connect_errors=1024

    table_open_cache = 400

    expire_logs_days=10

    innodb_buffer_pool_size=2G

    innodb_file_per_table=1

    innodb_log_buffer_size = 32M

    innodb_open_files = 800

    sync_binlog=0

    # 打开慢查询日志功能

    slow_query_log = 1

    # 超过2秒的查询记录下来

    long_query_time = 2

    # 记录下没有使用索引的查询

    log_queries_not_using_indexes = 0

    slow_query_log_file =/home/mysqlm/data/log/slowquery.log

    [mysqldump]

    quick

    max_allowed_packet = 16M

    [mysql]

    [isamchk]

    key_buffer_size = 128M

    sort_buffer_size = 128K

    [myisamchk]

    key_buffer = 128M

    sort_buffer_size = 128K

    [mysqlhotcopy]

    interactive_timeout

    设置my.cnf读写执行权限

    chmod 777my.cnf

    chown  mysqlmaster:mysqlmaster my.cnf

    将mysql的库文件路径及输出mysql的头文件加入系统的库文件搜索路径中.注: 此处只需将一个mysql实例的库文件添加到系统库,无需多次添加。

    ln -s /opt/mysqlmaster/mysqlm/lib/mysql /usr/lib/mysql

    ln -s /opt/mysqlmaster/mysqlm/include/mysql /usr/include/mysql

    进入相应实例的安装路径,初始化各自配置脚本

    如果指定的data目录不为空,需要删除并重新创建及赋予777权限

    初始化数据库

    bin/mysqld --initialize --user=mysqlmaster --basedir=/opt/mysqlmaster/mysqlm --datadir=/home/mysqlm/data/ --tmpdir=/tmp

    如果没有上图,可以使用,echo  $?   如果返回为0,证明初始化成功。密码的话在err.log日志去查找。

    查看/home/mysqlm/data/err.log

    复制启动脚本到系统服务

    cp /opt/mysqlmaster/mysqlm/support-files/mysql.server /etc/init.d/mysqlmaster

    创建log目录,因为初始化数据库时候data不允许有任何文件,所以只能等初始化完毕后在创建。

    Mkdir –p /home/mysqlm/data/log/

    Chmod 755 –R /home/mysqlm/data/log/

    Chown –R mysqlmaster:mysqlmaster /home/mysqlm/data/log/

    修改启动脚本。

    Vim /etc/init.d/mysqlmaster

    先关闭再启动

    $cd /opt/mysqlmaster/mysqlm

    $bin/mysqld stop

    (mysqlmaster实例启动)

    /etc/init.d/mysqlmaster start

    如果启动失败,查看错误日志。

    cd /opt/mysqlmaster/mysqlm/bin

    ./mysql -u root -p    ###密码是初始化数据库时候的密码。

    进去以后可以修改密码。

    set password for root@localhost=password(‘123456’)

    ####5.7.22如果忘记密码,则可以使用以下操作。

    ####进入my.cnf跳过密码登陆

    ####在[mysqld]里面添加skip-grant-tables

    ####在进行登陆的时候回车跳过密码

    ####登陆成功后切换至mysql数据库

    ####Use mysql

    ####给root授权密码

    ####update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';

    ####刷新密码

    ####flush privileges;

    ####quit退出

    ####关闭数据库找到my.cnf去掉skip-grant-tables

    ####去掉后启动数据库。使用刚刚设置的密码123456登陆数据库。

     二、主从复制配置

    从服务器在另一台服务器安装,安装方法一样。

    配置主从

    修改my.cnf,master主服务器配置。

    Server-id,master务器不能跟slave服务器的id一样。

    Bin-log日志的路径指定,要有写入权限。

    修改my.cnf,slave从服务器配置。

    在主库(master)中创建一个用户用于与从库同步的用户名和密码(这里我创建一个slave_user用户,密码为123456),并给slave_user用户授权,以用于主库操作从库。

    192.168.161.141(主库master)

    192.168.161.140(从库slave)

    create user 'slave_user'@'192.168.161.140' identified by '123.COM!';

    grant replication slave on *.* to 'slave_user'@'192.168.161.140';

    flush privileges;

    查看用户是否创建成功。

    mysql> sele,host from mysql.user;

    查看master的状态。

    show master status;

    这里的mysql-bin.000026,和Position值154,slave配置的时候会用到。

    在master创建几个库做测试。

    create database htjk;

    use htjk

    create table test(id int,name varchar(50));

    insert into test (id,name) values(1,'lisi');

    导出数据。     

    直接输入命令mysqldump会发现提示命令不存在,是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,自然会找不到命令,并报错。知道了问题的所在,就直接去处理,先用一条find命令查找mysqldump的所载路径。

    find  / -name mysqldump

    然后再用ln命令链接到/usr/bin下面。

    ln -fs /opt/mysqlmaster/mysqlm/bin/mysqldump /usr/bin

    mysqldump -u root -p --all-databases --master-data >/root/all.sql

    查看所导出的数据。

    将数据发送到到slave服务器上面,使数据保持一致。

    scp all.sql root@192.168.161.140:/tmp

    在slave服务器导入master数据。

    ./mysql -uroot -p < /tmp/all.sql

    导入数据成功后查询数据是否正确。

    slave> reset slave all   #重新change master to

    mysql> change master to

        -> master_host='192.168.161.141',

        -> master_user='slave_user',

        -> master_password='123.COM!',

        -> master_log_file='mysql-bin.000026',

        -> master_log_pos=154,

        -> MASTER_CONNECT_RETRY=10;

     ##关于MASTER_CONNECT_RETRY,在主服务器宕机的情况下,从服务器线程重新尝试连接主服务器之前睡眠的秒数。如果主服务器.Info文件中的值可以读取则优先使用,如果未设置,默认为60秒。

     

    启动slave

    start slave;  

    ##关闭命令stop slave

    ##重启命令reset slave

    查看slave的状态。

    show slave status G

    只要Slave_IO_Running: Yes, Slave_SQL_Running: Yes,主从就搭建成功。若其中一项不为yes,查看mysql的错误日志。

    ##测试出现问题

    Slave_IO_Running: Yes, Slave_SQL_Running: Yes,都为yes,但是数据不同步。

    是因为主数据库的my.cnf配置文件,只指定了需要同步的库导致的。

    Binlog-do-db=dbname ##

    Binlog-ignore-db=mysql #

    根据自己公司情况而定,是需要全部同步,还是要只指定的库进行同步。

    主从同步配置。

    binlog-ignore-db = mysql

    binlog-ignore-db=information_schema

    binlog-ignore-db=performance_schema

    binlog-ignore-db=sys

    主从配置完成,你可以想同步哪个数据库就可以同步哪个数据库。

    可能不是特别仔细的文档,需要理解的去搭建数据库,如有问题,请多多指教。

  • 相关阅读:
    vue 同页面不同参数
    vue的data用到this问题
    vue轮播,不是只有左右切换的,还有只切换src的
    vue页面高度填充,不出现滚动条
    WdatePicker做出onchange效果
    总结最近移动端遇到的坑(auto-size + zepto)
    react
    ES6-set && 数组剔重
    [置顶] Jquery easyui+Jsonp+asp.net+翻页 事件版
    扩展Jquery easyui的validator插件
  • 原文地址:https://www.cnblogs.com/sxshaolong/p/10297875.html
Copyright © 2020-2023  润新知