zoukankan      html  css  js  c++  java
  • mysql相关笔记

    接下来的过程,共分为三部分:源码安装 mysql server,配置远程连接权限和c++远程访问mysql测试。

    一、源码安装mysql。

      1、安装必备包。

    yum install -y gcc gcc-c++ make automake wget
    

       2、源码安装cmake。

    wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz
    
    tar -zxvf cmake-2.8.10.2.tar.gz
    
    cd cmake-2.8.10.2
    
    ./bootstrap
    
    gmake
    
    gmake install
    
    cat install_manifest.txt //see  install list
    

       注意:如果执行./bootstrap 报错,则rm -rf  CMakeCache.txt,再执行。

      3、安装mysql

     yum -y install bison-devel ncurses-devel
    
     wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.24.tar.gz
    
     tar -zxvf mysql-5.6.24.tar.gz
    
     cd mysql-5.6.24
    
     cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.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
    
     make
    
     make install
    

       注意:如果cmake出错,则:rm -rf CMakeCache.txt,再执行。

      至此mysql已经安装完毕,接下来就是配置一些东西。

    二、供远程连接。

    1、groupadd mysql
    
    2、useradd -g mysql mysql
    
    3、chown -R mysql:mysql /usr/local/mysql
    
    4、cd /usr/local/mysql
    
        创建mysql自带的系统数据库:./scripts/mysql_install_db --basedir=/usr/local/mysql      --datadir=/usr/local/mysql/data --user=mysql
    
    
    5、修改mysql配置文件,/usr/local/mysql/my.cnf添加以下内容:
        basedir =/usr/local/mysql/
        port=3306
        datadir=/usr/local/mysql/data
    
    6、添加PATH路径
        把export PATH=$PATH:/usr/local/mysql/bin添加到/etc/profile中
    
    7、source /etc/profile
    
    8、需要更改该配置文件的所有者:chown -R mysql:mysql /usr/local/mysql/my.cnf否则下面启动 mysql服务会报错;
    
          ( 注:在启动MySQL服务时,会按照一定次序搜索my.cnf,先在/etc目录下找,找不到则会到你安装的mysql目录找,在本例中就是 /usr/local/mysql/my.cnf。
    
           注意:在CentOS 6.4版操作系统的最小安装完成后,在/etc目录下会可能会存在一个my.cnf,需要将此文件更名为其他的名字,
     
           如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的MySQL的正确配置,造成无法启动。 重命名的命令是:mv my.cnf my.cnf.bak)
    
           重命名 /etc下的my.cnf 为 my.cnf.bak   mv my.cnf my.cnf.bak
    
    9、cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld #复制脚本 
    
    10、chmod +x /etc/init.d/mysqld #增加可执行权限 
    
    11、chkconfig --add mysqld #增加至sysV服务 
    
    12、chkconfig mysqld on  #开机自启动
    
    13、service mysqld start #启动mysql服务
    
    14、netstat -aux|grep mysq #查看启动的mysql进程
    
    15、systemctl stop firewalld.service#停止
    
    (chmod 755 /usr/local/mysql/bin)
    
    16、mysql -u root
    
    17、update user set password=password('123456') where user='root';
    
    18、允许远程连接数据库  GRANT   ALL   PRIVILEGES   ON   *.*   TO   'root'@'%'   WITH   GRANT   OPTION;  
    
    19、生效 FLUSH   PRIVILEGES;
      
    20、exit;
    21、vim  /etc/sysconfig/iptables  写入 "-A INPUT -p tcp -m state --state NEW -m tcp 
        --dport      3306 -j ACCEPT"
    

     三、c++远程操作数据库

      1、寻找mysql客户端的共享库:libmysqlclient.so ,和mysql.h 等头文件。我是直接copy mysql server 服务器上的mysql/lib 和 mysql/include 下的东西。

      2、测试:

      MyDB.h

    #include<iostream>
    #include<string>
    #include<mysql.h>
    using namespace std;
    
    class MyDB
    {
        public:
        MyDB();
        ~MyDB();
        bool initDB(string host,string user,string pwd,string db_name); //连接mysql
        bool exeSQL(string sql);   //执行sql语句
        private:
        MYSQL *mysql;          //连接mysql句柄指针
        MYSQL_RES *result;    //指向查询结果指针
        MYSQL_ROW row;       //按行返回的查询
    };
    

       MyDB.cpp

    #include<iostream>
    #include<string>
    #include "MyDB.h"
    
    using namespace std;
    
    MyDB::MyDB()
    {
        mysql=mysql_init(NULL);   //初始化数据库连接变量
        if(mysql==NULL)
        {
            cout<<"Error:"<<mysql_error(mysql);
            //exit(1);
        }
    }
    
    MyDB::~MyDB()
    {
        if(mysql!=NULL)  //关闭数据连接
        {
            mysql_close(mysql);
        }
    }
    
    
    bool MyDB::initDB(string host,string user,string passwd,string db_name)
    {
        // 函数mysql_real_connect建立一个数据库连接  
        // 成功返回MYSQL*连接句柄,失败返回NULL  
        mysql = mysql_real_connect(mysql, host.c_str(), user.c_str(), passwd.c_str(), db_name.c_str(), 0, NULL, 0);  
        if(mysql == NULL)  
        {  
            cout << "Error: " << mysql_error(mysql);  
            //exit(1);  
        }  
        return true;  
    }
    
    bool MyDB::exeSQL(string sql)
    {
        //mysql_query()执行成功返回0,执行失败返回非0值。
        if (mysql_query(mysql,sql.c_str()))
        {
            cout<<"Query Error: "<<mysql_error(mysql);
            return false;
        }
        else // 查询成功
        {
            result = mysql_store_result(mysql);  //获取结果集
            if (result)  // 返回了结果集
            {
               int  num_fields = mysql_num_fields(result);   //获取结果集中总共的字段数,即列数
               int  num_rows=mysql_num_rows(result);       //获取结果集中总共的行数
               for(int i=0;i<num_rows;i++) //输出每一行
                {
                    //获取下一行数据
                    row=mysql_fetch_row(result);
                    if(row<0) break;
    
                    for(int j=0;j<num_fields;j++)  //输出每一字段
                    {
                        cout<<row[j]<<"		";
                    }
                    cout<<endl;
                }
    
            }
            else  // result==NULL
            {
                if(mysql_field_count(mysql) == 0)   //代表执行的是update,insert,delete类的非查询语句
                {
                    // (it was not a SELECT)
                    int num_rows = mysql_affected_rows(mysql);  //返回update,insert,delete影响的行数
                }
                else // error
                {
                    cout<<"Get result error: "<<mysql_error(mysql);
                    return false;
                }
            }
        }
    
        return true;
    
    }
    

       text.cpp

    #include<iostream>
    #include"MyDB.h"
    using namespace std;
    
    int main()
    {
        MyDB db;
        //连接数据库
         db.initDB("192.168.1.121","root","000000","prize");
         //将所有用户信息读出,并输出。
         db.exeSQL("select * from prize;");
    
          return 0;
    }
    

       Makefile

    test:test.cpp MyDB.cpp
            g++  test.cpp MyDB.cpp -o test    -L/usr/local/mysql/lib -lmysqlclient -I/usr/local/mysql/include
    

       make 

      ./test 回查出prize 数据库下的 prize表的所有信息 

      

  • 相关阅读:
    cURL(wget)—— 测试 RESTful 接口及模拟 GET/POST/PUT/DELETE/OPTIONS 请求
    docker 第一课 —— 从容器到 docker
    docker 第一课 —— 从容器到 docker
    多类 SVM 的损失函数及其梯度计算
    软RAID 0的技术概要及实现
    用 Linux blkid 命令查找块设备详情
    常用命令
    Ubuntu---samba(安装、配置、使用)***
    系统常用命令
    在64位的UBUBTU 服务器 ***
  • 原文地址:https://www.cnblogs.com/airduce/p/10287455.html
Copyright © 2011-2022 走看看