Sep 22 2010

How to change all fields/tables to a different collation

// this script will output the queries need to change all fields/tables to a different collation
// it is HIGHLY suggested you take a MySQL dump prior to running any of the generated
// this code is provided as is and without any warranty

This script will output the queries need to change all fields/tables to a different collation.

It is HIGHLY suggested you take a MySQL dump prior to running any of the generated

This code is provided as is and without any warranty

<?php

// this script will output the queries need to change all fields/tables to a different collation

// it is HIGHLY suggested you take a MySQL dump prior to running any of the generated

// this code is provided as is and without any warranty

die(”Make a backup of your MySQL database then remove this line”);

set_time_limit(0);

// collation you want to change:

$convert_from = ‘latin1_swedish_ci’;

// collation you want to change it to:

$convert_to   = ‘utf8_general_ci’;

// character set of new collation:

$character_set= ‘utf8′;

$show_alter_table = true;

$show_alter_field = true;

// DB login information

$username = ‘username’;

$password = ‘password’;

$database = ‘database’;

$host     = ‘localhost’;

mysql_connect($host, $username, $password);

mysql_select_db($database);

$rs_tables = mysql_query(” SHOW TABLES “) or die(mysql_error());

print ‘<pre>’;

while ($row_tables = mysql_fetch_row($rs_tables)) {

$table = mysql_real_escape_string($row_tables[0]);

// Alter table collation

// ALTER TABLE `account` DEFAULT CHARACTER SET utf8

if ($show_alter_table) {

echo(”ALTER TABLE `$table` DEFAULT CHARACTER SET $character_set;\r\n”);

}

$rs = mysql_query(” SHOW FULL FIELDS FROM `$table` “) or die(mysql_error());

while ($row=mysql_fetch_assoc($rs)) {

if ($row['Collation']!=$convert_from)

continue;

// Is the field allowed to be null?

if ($row['Null']==’YES’) {

$nullable = ‘ NULL ‘;

} else {

$nullable = ‘ NOT NULL’;

}

// Does the field default to null, a string, or nothing?

if ($row['Default']==’NULL’) {

$default = ” DEFAULT NULL”;

} else if ($row['Default']!=”) {

$default = ” DEFAULT ‘”.mysql_real_escape_string($row['Default']).”‘”;

} else {

$default = ”;

}

// Alter field collation:

// ALTER TABLE `account` CHANGE `email` `email` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL

if ($show_alter_field) {

$field = mysql_real_escape_string($row['Field']);

echo “ALTER TABLE `$table` CHANGE `$field` `$field` $row[Type] CHARACTER SET $character_set COLLATE $convert_to $nullable $default; \r\n”;

}

}

}

?>

Jul 11 2010

Scripting a MySQL InnoDB Engine Conversion

0) Backup your database.
You should probably be doing this already.  Now’s a good time to make sure that your backups ran.

1) Create the script.
You’ll need the correct permissions to query the database. Here’s the command.  Be sure to change <DATABASE_NAME> as it fits.

# mysql -p -e "show tables in <DATABASE_NAME>;" | \
tail --lines=+2 | \
xargs -i echo "ALTER TABLE {} ENGINE=INNODB;" > alter_table.sql

2) Run the script.

# mysql --database=<DATABASE_NAME> -p < alter_table.sql

3) Verify it by running this command in mysql:

mysql> show table status;

Read more …

/usr/local/bin/mysql.backup.sh

#!/bin/bash
NOW=$(date +"%m-%d-%Y")
OLD=$(date +"%m-%d-%Y" --date="3 days ago")
PROJECT="project_name"
LOCATION="/home/backup"
FILE="$PROJECT.$NOW.sql"
FILE2="$FILE.gz"
FILEOLD="$PROJECT.$OLD.sql.gz"
EMAIL="youremail@domain.com"
$SQLUSER="username"
$SQLPASS="password"
$SQLNAME="database_name"
cd $LOCATION ; \
rm -f $FILEOLD ; \
mysqldump -u $SQLUSER --password=$SQLPASS $SQLNAME > \
$LOCATION/$FILE ; \
gzip $LOCATION/$FILE ; \
echo "Backup location is in $LOCATION/$FILE2" | \
mail -s "[$PROJECT] MySQL Backup" $EMAIL

Then you can put it on your cron (background process)

Below cron will execute the script on Saturday at 12AM:

0 0 * * 6 /usr/local/bin/mysql.backup.sh

Good luck!

Jul 25 2009

How to tune Apache and Mysql

By default, Apache comes preconfigured to serve a maximum of 256 clients simultaneously. This particular configuration setting can be found in the file /etc/httpd/conf/httpd.conf

If your server has 2 GB of RAM, and you’re sharing your server with MySQL(true in my case), you’ll want to reserve about half of it for Apache (1 GB)

Read more …

Jun 08 2009

MySQL Master-Slave Replication

To setup Master-Slave Replication the first thing you need to do is create a user on the Master server that allows replication.

Read more …