安装依赖:
yum -y install cmake bison bison-devel gcc gcc-c++ autoconf zlib zlib-devel libxml2 libxml2-devel ncurses-devel libtool-ltdl libtool-ltdl-devel make
建立mysql用户:
groupadd mysql useradd -r -g mysql mysql
编译:
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/usr/local/mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8mb4 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 -DWITH_DEBUG=0 make -j 4 && make install
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql chown -R mysql /usr/local/mysql/. chgrp -R mysql /usr/local/mysql/. cd /usr/local/mysql chmod +x scripts/mysql_install_db ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --collation-server=utf8_general_ci chown -R root /usr/local/mysql/. chown -R mysql /usr/local/mysql/data cp ./support-files/my-huge.cnf /usr/local/mysql/my.cnf cp ./support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld chkconfig --add mysqld chkconfig --level 345 mysqld on
编辑mysql的配置文件
vi /usr/local/mysql/my.cnf,在[mysqld]标签里面加入:datadir=/usr/local/mysql/data
启动
service mysqld start
连接
mysql -uroot -proot@Mysql
本来就应该是这样了,但是测试环境本身存在一个mysql5.5,于是灾难就开始了
一切根源其实在于默认的配置文件,确切的说是路径问题,首先编译安装时要指定不同的目录
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/maria -DSYSCONFDIR=/usr/local/maria -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8mb4 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306 -DWITH_DEBUG=0 make -j 4 && make install
安装完成后修改 my.cnf 配置文件
port 和 socket 自然要修改,最好也指定一下 datadir
然后是修改服务脚本
cp ./support-files/mysql.server /etc/init.d/mariad
进入以后修改datadir和basedir并不会改变 my.cnf 的加载位置,一劳永逸的方法是在’start’)下面的mysqld_safe直接添加启动参数–defaults-file=/usr/local/maria/my.cnf
而且几乎每一项mysql的程序操作都要指定配置文件,否则会使用 /etc/my.cnf 配置文件造成冲突,严重的可能损毁数据库
然后是初始化数据库也要指定 –defaults-file=/usr/local/maria/my.cnf参数
最严重的一个问题,连接maria时一定要看下连接到的是哪台数据库,test环境亲测./mysql -P2206 -uroot -p 连接上的却是原本的mysql数据库而非maria数据库,测试环境就是卡在这里了好久,一个简单的方法就是其实进入控制台后查看前缀是 MySQL [(none)]> 还是 MariaDB [(none)]>
关于./mysql -P2206 -uroot -p 连接上的是原本的mysql数据库而非maria数据库的原因是:
linux上面mysql存在两种连接方式,一种是TCP/IP ,另一种是 socket 方式。
socket 方式性能更好但只允许本机访问,所以为了安全mysql和Maria推荐这种方式连接本机,具体到命令上就是
./mysql 不指定IP地址或者 localhost 的话,默认以 socket 方式连接,只有指定了IP地址才以 TCP/IP 方式连接。
而这里有一个坑,./mysql 默认使用 /etc/my.cnf 配置文件,所以执行 ./mysql -P2206 的时候实际是忽略端口,进而使用socket方式连接的,而因为默认加载的是 /etc/my.cnf 所以使用原来 mysql 的socket也就不为怪了。
所以要连接 maria 数据库有两种方法:
1、指定配置文件,./mysql –defaults-file=/usr/local/maria/my.cnf
2、指定 socket 文件,./mysql -S /tmp/maria.sock
另外mariadb 10 也不再支持log-slow-queries,改为slow-query-log-file
其它编译参数
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/mydata/data/ \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STPRAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWIYH_READLINE=1 \ -DWIYH_SSL=system \ -DVITH_ZLIB=system \ -DWITH_LOBWRAP=0 \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8_general_ci cmake . -DMYSQL_UNIX_ADDR=/tmp/mariadb.sock \ -DSYSCONFDIR=/home/local/mariadb \ -DMYSQL_TCP_PORT=3309 \ -DEXTRA_CHARSETS=all \ -DMYSQL_USER=mariadb \ -DCMAKE_INSTALL_PREFIX=/home/local/mariadb \ -DMYSQL_DATADIR=/home/data/mariadb \ -DWITH_XTRADB_STORAGE_ENGINE=1 \ -DWITH_FEDERATEDX_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STPRAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWIYH_READLINE=1 \ -DWIYH_SSL=system \ -DVITH_ZLIB=system \ -DWITH_LOBWRAP=0 \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8_general_ci