Mysql

作者: ToFlyBear | 来源:发表于2017-10-21 15:42 被阅读0次

    查看 ubuntu 版本
    lsb_release -a

    1. 下载
      http://dev.mysql.com/downloads/mysql/

    选 source code

    下面有很多版本, 选择Generic Linux (Architecture Independent), Compressed TAR Archive 这个版本

    1. 编译的工具
      gcc
      cmake

    2. 编译过程
      假设源码解压后文件夹名为mysql

    cd mysql
    mkdir bld
    cd bld
    mkdir –p target/data
    mkdir –p target/mysql
    mkdir boost
    cmake ..
    -DCMAKE_INSTALL_PREFIX=/home/lindt
    -DMYSQL_DATADIR=/home/lindt/data/
    -DMYSQL_UNIX_ADDR=/home/lindt/bin/mysql.sock
    -DDOWNLOAD_BOOST=1
    -DWITH_BOOST=/home/lindt/boost
    -DWITH_DEBUG=1
    -DDEFAULT_CHARSET=utf8
    -DDEFAULT_COLLATION=utf8_bin
    -DWITH_EXTRA_CHARSETS:STRING =all
    -DWITH_MYISAM_STORAGE_ENGINE=1
    -DWITH_INNOBASE_STORAGE_ENGINE=1
    -DWITH_INNODB_MEMCACHED=ON
    -DWITH_EMBEDDED_SERVER=OFF
    -DWITHOUT_NDBCLUSTER_STORAGE_ENGINE=1
    -DENABLED_LOCAL_INFILE=1
    -DCMAKE_BUILD_TYPE=debug
    -DCMAKE_C_FLAGS="-o0 -g3"
    -DCMAKE_CXX_FLAGS="-o0 -g3"
    -DCMAKE_C_FLAGS_DEBUG="-o0 -g3"
    -DCMAKE_CXX_FLAGS_DEBUG="-o0 -g3"
    make
    make install

    cmake 编译问题
    apt-get update
    apt-get install cmake
    apt-get install bison
    apt-get install library*
    apt-get install libncurses5-dev
    apt-get install g++
    apt-get install kdelibs5-dev
    apt-get install make
    更新以下packets

    1. 配置运行
      切换到root用户
      useradd mysql
      cd target/mysql
      chown –R mysql:mysql .

    //为了方便,将指定配置文件my.cnf, 我放在附件里, 将这个文件放在 mysql/bld/target/mysql目录下, 里面写的绝对路径要相应改回来

    初始化一些基础库

    bin/mysqld --defaults-file=my.cnf --initialize-insecure --user=mysql

    使用源码安装的mysql,请确认/etc/mysql/my.cnf是否存在,如果存在请删除,这部导致老有路径问题

    unknown variable 'default-file=my.cnf' --defaults-file 要在最前面

    bin/mysql_ssl_rsa_setup

    chown –R root .
    chown –R mysql:mysql ../data

    my.cnf
    [client]
    port = 3307
    socket = /home/zhangcb/Lab/mysql/src/bld/target/data/mysqld.sock
    basedir = /home/zhangcb/Lab/mysql/src/bld/target/mysql
    datadir = /home/zhangcb/Lab/mysql/src/bld/target/data
    socket = /home/zhangcb/Lab/mysql/src/bld/target/data/mysqld.sock
    port = 3307
    server_id = 1
    pid-file = /home/zhangcb/Lab/mysql/src/bld/target/data/mysqld.pid

    bind-address = 127.0.0.1
    log_error = /home/zhangcb/Lab/mysql/src/bld/target/data/error.log
    log_bin = /home/zhangcb/Lab/mysql/src/bld/target/data/mysql-bin.log
    expire_logs_days = 10
    max_binlog_size = 100M
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    下面可以运行了

    带密码初始化
    ./bin/mysqld --defaults-file=/home/lindt/etc/my.cnf --initialize --user=golden_lindt //--user 当前用户
    不带密码初始化
    ./bin/mysqld --defaults-file=/home/lindt/etc/my.cnf --initialize-insecure --user=golden_lindt

    启动
    bin/mysqld_safe --defaults-file=/home/lindt/my.cnf &

    关闭
    mysqladmin -hlocalhost -uroot -p'xxx' -P5528 shutdown

    用户修改密码
    grant all on . to 'root'@'%' identified by 'db10'; grant all on *.* to 'root'@'localhost' identified by 'db10';
    grant all on . to 'root'@'10.46.180.10' identified by 'db10$';
    flush privileges;

    插件安装
    install plugin rpl_semi_sync_master_soname 'semisync_master.so'
    install plugin rpl_semi_sync_slave_soname 'semisync_slave.so'
    启动及查看
    set global rpl_semi_sync_master_enabled =1;
    set global rpl_semi_sync_slave_enabled =1;
    select * from mysql.plugin;

    创建rpl用户及复制
    grant Replication client,Replication slave,Create routine,Create,Insert,Update,Delete,Drop,Select on . to 'repl'@'%' identified by 'repl' with grant option;
    CHANGE MASTER TO MASTER_HOST='192.168.0.1',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=5528;

    客户端 –initialize-insecure 初始化的时候没加密码 所以直接回车就可以
    bin/mysql --defaults-file=my.cnf -hlocalhost -uroot –p
    ---我并未输入密码,而是直接回车,因为之前用的参数是--initialize-insecure

    调试 编译的时候编的是debug的版本

    先找到服务器的进程号, 比如下面的

    23543 pts/5 00:00:00 mysqld_safe
    2 3766 pts/5 00:00:01 mysqld

    启动gdb

    gdb

    attach到服务端的进程

    attach 2 3766

    下面可以设置断点(比如)

    b mysql_parse

    从客户端随便运行语句就可以一步一步调试,用gdb可以多使用bt命令看看调用堆栈

    读代码可以从几个切入点去看 比如如何从disk获取一页数据,锁如何管理,如何写入的一页数据,线程如何管理等等。。。 一遍一遍看

    相关文章

      网友评论

          本文标题:Mysql

          本文链接:https://www.haomeiwen.com/subject/qjgvuxtx.html